Alto rendimiento y alta disponibilidad (Parte 1/3)

greentickEn este articulo se presenta la primera entrega (1/3) de un  monográfico sobre la alta disponibilidad y alto rendimiento. ¿Por qué? Porque es una tecnología, (si podemos llamarlo así) que se usa hoy en día en computación de altas prestaciones y sistemas que dan soporte a infrastructuras tan demandadas como es la «Cloud».

En esta primera parte, que sirve de introducción, deberemos sentar las bases para hablar en futuras (espero que muy pronto) entradas del blog de los aspectos mas técnicos. Esta primera parte, muy teórica por cierto, hablaremos de aspectos tan importante como definiciones, motivaciones, métricas,… espero no aburriros mucho, pero ahí va:

¿Qué es la alta disponibilidad?

El concepto de alta disponibilidad se refiere a la implementación de dos o más sistemas, asegurando mediante mecanismos de monitorización, que el servicio no se interrumpa en caso de fallo.

Esto implica que, en entornos de producción con cargas elevadas de trabajo, una parada del servicio tenga consecuencias mínimas para los usuarios, que podrían seguir trabajando de forma transparente.

¿Por qué?

  • Enero 15, 1990: La red telefónica de AT&T se cae, debido a un bug en una actualización de software que controla los switches de larga distancia de la compañía. Supuso 15.000.000 de afectados sin servicio.
  • Caídas de Twitter: 145.000.000 de usuarios sin servicio
  • 15 Marzo 2007: Caída de la red de Hotmail y Messenger –> 15.000.000$ en pérdidas.

meme failure

Tipos de alta disponibilidad

  • Alta disponibilidad de infraestructura: Una infrastructura con capacidades de alta disponibilidad es la que es capaz de proveer servicios incluso con fallos, o al menos durante más tiempo que una infraestructura convencional. Entendemos infrastructura como el equipamiento en el que se apoyan los servicios.
  • Alta disponibilidad de servicio: Un servicio en alta disponiblidad es aquel que tiene las capacidades de funcionar incluso estando en fallo, o al menos durante más tiempo que uno convencional.

Términos

A la hora de hablar de alta disponibilidad necesitaremos esclarecer una serie de términos necesarios para saber de que va todo esto:

  • Avería (fault): Es una desviación del comportamiento del sistema respecto del comportamiento especificado como correcto. Puede ser: una avería hardware, un código erróneo, una equivocación de un operador, una caída de potencia, etc.
  • Error: Es un estado incorrecto del sistema como consecuencia de una avería. Un error puede manifestarse como fallo, o permanecer oculto y sin consecuencias.
  • Fallo (failure): Es la manifestación externa de un error que es detectable por un operador humano, u otro sistema que interacciona con él.

I_am_error

 

Cuantificación de la disponibilidad

Se define disponibilidad como la probabilidad de que el sistema esté operacional en el instante t.

La fiabilidad o R(t) de un sistema es la probabilidad de que el sistema se haya mantenido sin fallos en el intervalo [0,t] suponiendo que en el instante 0 estaba operativo.

Para sistemas sin reparaciones la disponibilidad y la fiabilidad coinciden. Sin embargo, si los sistemas fallan y se recuperan estos dos conceptos difieren. Por ejemplo, un sistema que se caiga cada 1 segundo pero se recupera cada 1 μs tiene una alta disponibilidad pero baja fiabilidad.

También tendremos la mantenibilidad. Esta se puede expresar como diferencial en función de la frecuencia de reparación μ(t) y del tiempo de reparación.

[math]\mu(t) = -d\frac{ln(1 – M(t)}{dt}[/math]

La fiabilidad R(t) se formula en función de la frecuencia de fallo o λ:

[math]\lambda = d\frac{ln R(t)}{dt}[/math]

Indicadores y cuantificación de la disponibilidad y de la fiabilidad

Contamos con los siguientes indicadores para medir disponibilidad y fiabilidad:

  • MTTF: Tiempo medio para un fallo.
  • MTBF: Tiempo medio entre fallos.
  • MTTT: Tiempo medio para la transición.
  • MTTR: Tiempo medio para recuperarse.

Las fórmulas que relacionan estos indicadores son las siguientes:

[math]MTTF = \int_{}^{}R(t) dt[/math]

[math]MTBF=MTTF+MTTR[/math]

Y las de la disponibilidad o A(t):

[math]A(t) = \frac{MTTF}{MTTF+MTTR} = \frac{MTTF}{ MTBF}[/math]

[math]A(t) = \frac{MTBF}{MTBF+MTTR}[/math]

Indicadores de confiabilidad

Ejemplos:

Caso 1

Un sistema con un 99,99% de disponibilidad en una ventana de 30 días tiene un tiempo de fallo de:

[math](1 – 0.9999)\times{} 30 \mbox{ dias} \times{} 24 \frac{ horas}{dia} \times{} 60 \frac{min}{hora} = 4.32 \mbox{ minutos}[/math]

Caso 2:

Si utilizamos un equipo con un tiempo medio entre fallos de 81.5 años y un tiempo medio de recuperación de 1 hora.

  • MTFB en horas = 81.5 x 365 x 24=713940
  • Disponibilidad = MTBF / MTBF+MTTR = 713940/713941 = 99.999859%
  • Indisponibilidad = 0.000141%
  • Fallos debido al equipo en horas/año = 0.01235 horas/año

A continuación se muestra una tabla típica que contiene tiempos medios de fallo de los componentes de un ordenador:

examples

 

Modelos de fiabilidad y disponibilidad

Hasta ahora hemos estado tratando un sistema como si fuera una unidad aislada en la que el cliente depende de él y este sistema no depende de nadie más. Pero la realidad es muy distinta, ya que por lo general un sistema da soporte y servicio a otros sistemas, o depende a su vez de otros. Y un fallo en uno de ellos puede ocasionar fallos a sus «dependientes». Hay diferentes técnicas para describir la fiabilidad y la disponibilidad de sistemas compuestos por muchos subsistemas, cada uno con su propia disponibilidad:

  • Modelo basado en diagramas de bloque de fiabilidad
  • Modelo basado en árboles de fallo
  • Modelos de Markov

Diagramas de bloque de fiabilidad

Se considera que un sistema S esta compuesto por subsistemas S1, S2, S3,… cada uno con su fiabilidad representada por la frecuencia de fallo.

En el diagrama de bloques de fiabilidad cada bloque representa un componente, y su conexión representa la dependencia de fallo:

  • Conexión serie: el sistema falla si uno de los subsistemas falla
  • Conexión paralela: el sistema falla si fallan todos los subsistemas
  • Conexión en escalera: combinación de serie y paralela

Modelo de árbol de fallos

Los fallos de un sistema se jerarquizan desde fallos mas próximos a los subsistemas, a fallos mas próximos a la funcionalidad del sistema y de mayor relevancia.

Entre los fallos se establecen relaciones AND, OR y R de N.
Cada fallo tiene asociada su probabilidad y distribución de tiempos entre fallos.

E3=(E6 AND E7) OR (E6 AND E8)OR (E7AND E8)

Modelo de Markov

Las situaciones de fallo del sistema se representan mediante estados de la máquina de estados. Las transiciones entre estados se corresponden con la posibilidad de ocurrencia de un nuevo evento de fallo.

En la figura se muestra el modelo de fallo de un sistema con tres CPU, de las que 2 son redundantes y que, con una sola, tiene capacidad de operar.

λ es la frecuencia de fallo de la CPU y μ es la frecuencia de reparación.

modelo_markov

¿Qué es alto rendimiento?

El alto rendimiento son sistemas capaces de mejorar la productividad de una tarea que reside en un sistema con unas capacidades limitadas o que pueden ser desbordadas en un momento ya sea conocido o aleatorio.

Evaluacion del rendimiento

Las métricas de rendimiento pueden categorizarse en tres clases:

  • LB (menos es mejor): El valor mas bajo es el mejor. Por ejemplo el tiempo de respuesta.
  • HB (más es mejor): El valor mas alto es el mejor. Por ejemplo el ancho de banda.
  • NB (normal es mejor): El valor nominal es el mejor. Por ejemplo la utilización.

evalucion_rendimiento

Evaluación del rendimiento

Índices de rendimiento:

  • Tiempo de espera: Tiempo que tarda un trabajo en entrar en el sistema.
  • Tiempo de respuesta: Tiempo que tarda un trabajo en ser procesado por el sistema una vez dentro.
  • Productividad o Throughput: Cantidad de trabajo útil generado por el sistema en un tiempo determinado.
  • Capacidad: Capacidad total del sistema para procesar trabajos en un tiempo determinado.

¿Cómo se obtiene alto rendimiento?

Los mecanismos para conseguir lo que denominamos alto rendimiento serían:

  • Disminuir los tiempos de espera
  • Disminuir los tiempos de respuesta
  • Aumentar la capacidad
  • Balanceo de carga

Balanceo de carga

El balanceo de carga permite dividir las tareas que tendría que soportar una única maquina que provee un servicio, con el fin de maximizar las capacidades de proceso de datos, así como de ejecución de tareas.

fig01

Además de esto, debemos destacar dos características importantes:

  1. Evita la saturación de una máquina. De esta forma, podemos evitar que picos de acceso a las maquinas (como por ejemplo los generados por campañas publicitarias), afecten al normal funcionamiento del servicio.
  2. Gestiona los recursos de manera inteligente. Permite gestionar y optimizar todos los recursos disponibles dando como resultado una acceso más rápido y estable a nuestros servicios.

Algoritmos de balanceo de carga

  • Round Robin (RR): distribuye la carga en forma equitativa entre los servidores.
  • Round Robin con pesos (WRR): Proporcional a su peso. Elementos con mas peso reciben mas carga. A igual peso, igual carga.
  • Menos congestionado (LC): más carga a elementos con menos conexiones.
  • Menos congestionado con pesos (WLC): mas carga a servidores con menos conexiones y relativo al peso.
  • Menos congestionado localizado (LBLC): más carga a elementos con menos conexiones, dando preferencia a los que estan en la misma red.
  • Menos congestionado localizado y replicado (LBLCR): variante del anterior que permite tener replicas en la misma red.
  • Destino hashing (DH): se selecciona en función de la dirección de destino.
  • Origen hashing (SH): se selecciona en función de la dirección de origen.
  • Menos retardo esperado (SED): se calcula quien dará una respuesta mas rápida.
  • Sin colas (NQ): en un sistema basado en cola se asigna a quien tenga la cola vácia, si no hay se emplea SED.

continuara-2