Trabajar en la era de los ‘Sistemas informáticos’ no es fácil, ni para los usuarios ni para los desarrolladores. Un sistema informático bien diseñado puede servir para los mejores propósitos, pero también es cierto que ningún sistema puede diseñarse sin errores. Son propensos a errores y fallas que pueden interrumpir el funcionamiento final del usuario, comprometiendo así su productividad y eficiencia de los resultados.
En este artículo veremos qué el la intolerancia a fallos, diferencia con la alta disponibilidad y las técnicas de tolerancia a fallos existentes.
Indice
¿Qué es la intolerancia a fallos (Fault Tolerance)?
Fault Tolerance es la característica incorporada en el sistema que permite su buen funcionamiento incluso después de que ocurre una falla en algunos de sus componentes. Un diseño tolerante a fallas puede causar una reducción en el nivel de productividad o un mayor tiempo de respuesta. Sin embargo, se asegura de que todo el sistema no falle. Por lo tanto, en resumen, funciona como un mecanismo de afrontamiento en un sistema que tiene como objetivo la autoestabilización.
Al principio de la tecnología, los sistemas tolerantes a fallas se diseñaron para dar alarmas al usuario o al operador sobre la posible falla. Se suponía que el operador actuaría sobre la alarma y aclararía las cosas antes de que ocurriera una avería importante. Esto implicó la interferencia humana. Sin embargo, hoy las cosas han cambiado. Los sistemas, ya sean hardware o software, están diseñados para resolver problemas de forma independiente sin mucha interferencia humana, a menos que sea un problema importante que requiera atención inmediata.
La tolerancia a fallas se refiere a la capacidad de un sistema (computadora, red, clúster de nube, etc.) para continuar funcionando sin interrupción cuando uno o más de sus componentes fallan.
El objetivo de crear un sistema tolerante a fallas es prevenir las interrupciones que surgen de un solo punto de falla, asegurando la alta disponibilidad y la continuidad comercial de las aplicaciones o sistemas de misión crítica.
Componentes
Los sistemas tolerantes a fallas utilizan componentes de respaldo que toman automáticamente el lugar de los componentes fallados, asegurando que no se pierda el servicio. Éstos incluyen:
- Sistemas de hardware respaldados por sistemas idénticos o equivalentes. Por ejemplo, un servidor puede ser tolerante a fallas utilizando un servidor idéntico que se ejecuta en paralelo, con todas las operaciones reflejadas en el servidor de respaldo.
- Sistemas de software respaldados por otras instancias de software. Por ejemplo, una base de datos con información del cliente se puede replicar continuamente en otra máquina. Si la base de datos principal deja de funcionar, las operaciones se pueden redirigir automáticamente a la segunda base de datos.
- Fuentes de energía que se hacen tolerantes a fallas utilizando fuentes alternativas. Por ejemplo, muchas organizaciones tienen generadores de energía que pueden asumir el control en caso de que falle la línea principal de electricidad.
De manera similar, cualquier sistema o componente que sea un punto único de falla puede hacerse tolerante a fallas usando la redundancia.
La tolerancia a fallas puede desempeñar un papel en una estrategia de recuperación ante desastres. Por ejemplo, los sistemas tolerantes a fallas con componentes de respaldo en la nube pueden restaurar sistemas de misión crítica rápidamente, incluso si un desastre natural o inducido por el hombre destruye la infraestructura de TI local.
Requisitos
Los siguientes son los requisitos de características principales para la tolerancia a fallas:
- Ningún punto único de falla: si el sistema falla, debe continuar funcionando durante la reparación sin interrupciones.
- Aislamiento de fallas de los componentes defectuosos: en caso de falla, el sistema debe poder aislar la falla del componente en cuestión. Esto requiere la adición de mecanismos de detección de fallas dedicados que existen solo para el aislamiento de fallas. La recuperación de un estado de falla requiere la clasificación de fallas o componentes defectuosos.
- Contención de fallas para evitar la propagación de la falla: Algunos mecanismos de falla pueden causar fallas en el sistema por la propagación de fallas al resto del sistema. El «transmisor no autorizado» es un ejemplo de tal falla que conduce a una comunicación legítima en el sistema y causa una falla completa del sistema. Un transmisor malintencionado o un componente defectuoso debe aislarse para proteger el firewall del sistema u otros mecanismos.
- Disponibilidad de modos de reversión.
Al igual que las ventajas de una técnica de tolerancia a fallos, también lo son sus desventajas.
La mayor desventaja es cuando una tolerancia a fallas en un componente reduce el rendimiento de otro componente, que depende de él. Cualquier tolerancia a fallas conducirá a la producción de productos inferiores y aumentará los costes a largo plazo.
Ejemplos
A veces, la tolerancia a fallas de hardware requiere que las piezas dañadas se eliminen y se reemplacen con piezas nuevas mientras el sistema aún está en funcionamiento. Estos sistemas implementados con una sola copia de seguridad se denominan tolerancia de un solo punto y representan la gran mayoría de los sistemas tolerantes a fallas.
La tolerancia a fallas tiene éxito en las aplicaciones informáticas. Los equipos en tándem construyen todo su negocio en esos equipos, que utilizan una tolerancia de un solo punto para crear sus sistemas ininterrumpidos, que se recuperan en años.
Una arquitectura a prueba de fallas también puede incluir software de computadora, como la replicación a través de procesos.
Los formatos de datos también se pueden diseñar para que se degraden de forma natural. Por ejemplo, HTML está diseñado para ser compatible con versiones posteriores, lo que permite a los navegadores web que no los entienden sin dejar el documento inutilizable ignorar las nuevas entidades HTML.
Tolerancia a fallos frente a alta disponibilidad
La alta disponibilidad se refiere a la capacidad de un sistema para evitar la pérdida de servicio minimizando el tiempo de inactividad. Se expresa en términos de tiempo de actividad de un sistema, como un porcentaje del tiempo de ejecución total. Cinco nueves, o 99,999% de tiempo de actividad, se considera el «santo grial» de la disponibilidad.
En la mayoría de los casos, una estrategia de continuidad empresarial incluirá tanto alta disponibilidad como tolerancia a fallas para garantizar que tu organización mantenga las funciones esenciales durante fallas menores y en caso de desastre.
Si bien tanto la tolerancia a fallas como la alta disponibilidad se refieren a la funcionalidad de un sistema a lo largo del tiempo, existen diferencias que resaltan su importancia individual en la planificación de la continuidad de tu negocio.
Considera la siguiente analogía para comprender mejor la diferencia entre tolerancia a fallas y alta disponibilidad. Un avión bimotor es un sistema tolerante a fallas: si un motor falla, el otro se activa, lo que permite que el avión continúe volando. Por el contrario, un automóvil con llanta de repuesto tiene una alta disponibilidad. Una llanta desinflada hará que el automóvil se detenga, pero el tiempo de inactividad es mínimo porque la llanta se puede reemplazar fácilmente.
Algunas consideraciones importantes al crear sistemas tolerantes a fallas y de alta disponibilidad en un entorno organizacional incluyen:
- Tiempo de inactividad: un sistema de alta disponibilidad tiene un nivel mínimo permitido de interrupción del servicio. Por ejemplo, un sistema con disponibilidad de «cinco nueves» está inactivo durante aproximadamente 5 minutos por año. Se espera que un sistema tolerante a fallas funcione continuamente sin una interrupción aceptable del servicio.
- Alcance: la alta disponibilidad se basa en un conjunto compartido de recursos que se utilizan en conjunto para administrar fallas y minimizar el tiempo de inactividad. La tolerancia a fallas se basa en las copias de seguridad de la fuente de alimentación, así como en el hardware o software que puede detectar fallas y cambiar instantáneamente a componentes redundantes.
- Coste: un sistema tolerante a fallas puede ser costoso, ya que requiere la operación y el mantenimiento continuos de componentes adicionales redundantes. Por lo general, la alta disponibilidad forma parte de un paquete general a través de un proveedor de servicios (por ejemplo, un proveedor de equilibrador de carga).
Algunos de tus sistemas pueden requerir un diseño tolerante a fallas, mientras que para otros, la alta disponibilidad puede ser suficiente. Debes sopesar la tolerancia de cada sistema a las interrupciones del servicio, el coste de dichas interrupciones, los acuerdos SLA existentes con los proveedores de servicios y los clientes, así como el coste y la complejidad de implementar la tolerancia total a fallas.
Tipos de fallos
Las fallas pueden ser seguras y mortales. Los ascensores que funcionan a un ritmo lento con luces tenues cuando se corta el suministro de la red eléctrica principal también se denomina degradación agraciada. La mejora progresiva es cuando la computación se ve obstaculizada debido a fallas. Por ejemplo, las páginas del sitio web se cargan en la versión básica cuando la conectividad a Internet es débil.
Técnicas de tolerancia a fallos
La tolerancia a fallos del sistema informático se soluciona en dos niveles: tolerancia a fallas de hardware y tolerancia a fallas de software.
La tolerancia a fallas de hardware es mucho más fácil de manejar que la tolerancia a fallas de software. Las técnicas de tolerancia a fallas requieren un conocimiento profundo y un trabajo interdisciplinario, y un gran examen crítico de los sistemas y su funcionamiento. Cualquier actualización puede requerir grandes costos y tiempo y también puede aumentar o disminuir el tamaño, el peso y el diseño del sistema según la complejidad involucrada.
De hardware
Las principales técnicas de tolerancia a fallos de hardware son:
- BIST (autoprueba integrada). Esta técnica permite al sistema realizar pruebas a intervalos específicos para evaluar cualquier propagación defectuosa. Siempre que señala una falla, se configura para cambiar el componente defectuoso y cambiar su redundante en su lugar.
- TMR (redundancia modular triple). En esta técnica, se generan tres copias redundantes de un componente defectuoso y se ejecutan simultáneamente. Se vota por su desempeño y se selecciona la mayoría de votos. Puede tolerar una sola falla a la vez.
- Cortacircuitos. Este es un diseño de circuito que permite romper el circuito para evitar fallas catastróficas en sistemas distribuidos.
De software
Estas técnicas, si se implementan, ayudan a que el software sea más confiable.
- Programación de la versión N. En esta técnica, n desarrolladores desarrollan n versiones de un programa. Todas estas copias se ejecutan simultáneamente y se selecciona la que tiene la mayor tolerancia a fallos. Esta es una técnica de detección de fallas que se utiliza en la etapa de desarrollo del software.
- Bloques de recuperación. Esta técnica es algo similar a la anterior, excepto que las copias redundantes no se ejecutan simultáneamente. Se ejecutan una por una y se generan con un conjunto diferente de algoritmos. Esta técnica se utiliza cuando los plazos de las tareas superan el tiempo de cálculo.
- Recuperación de comprobación y retroceso. Mediante esta técnica, el sistema se prueba cada vez que se necesita realizar un cálculo.
- Computación ajena a las fallas. Esta técnica permite que los programas informáticos continúen ejecutándose a pesar de los errores. Maneja lecturas de memoria inválidas devolviendo el valor fabricado al programa donde, a su vez, el programa considera este nuevo valor e ignora el valor anterior en su memoria. Esto es algo poco probable en las comprobaciones de memoria anteriores, que abortaban los programas por entradas no válidas.
- Pastoreo de recuperación. Esta técnica funciona con el pin de marco binario justo a tiempo. Se adjunta al proceso de aplicación, analiza el error, toma nota de las reparaciones y rastrea los efectos de la reparación y se desconecta del programa de aplicación una vez que todos los efectos de reparación se eliminan del programa. Todo esto ocurre en el back-end mientras el programa funciona en su estado normal y no obstaculiza su ejecución habitual.
Tolerancia a fallos para aplicaciones web
En el contexto de la entrega de aplicaciones web, la tolerancia a fallas se relaciona con el uso de soluciones de equilibrio de carga y conmutación por error para garantizar la disponibilidad a través de la redundancia y la recuperación rápida de desastres.
El equilibrio de carga y la conmutación por error son aspectos integrales de la tolerancia a fallas.
Las soluciones de equilibrio de carga permiten que una aplicación se ejecute en varios nodos de red, eliminando la preocupación por un solo punto de falla. La mayoría de los equilibradores de carga también optimizan la distribución de la carga de trabajo en varios recursos informáticos, lo que los hace individualmente más resistentes a los picos de actividad que, de otro modo, causarían ralentizaciones y otras interrupciones.
Además, el equilibrio de carga ayuda a hacer frente a las fallas parciales de la red. Por ejemplo, un sistema que contiene dos servidores de producción puede utilizar un equilibrador de carga para cambiar automáticamente las cargas de trabajo en caso de que falle un servidor individual.
Las soluciones de conmutación por error, por otro lado, se utilizan durante los escenarios más extremos que resultan en una falla total de la red. Cuando esto ocurre, un sistema de conmutación por error se encarga de activar automáticamente una plataforma secundaria (en espera) para mantener una aplicación web en ejecución mientras el equipo de TI vuelve a poner en línea la red principal.
Para una verdadera tolerancia a fallas con cero tiempo de inactividad, debes implementar la conmutación por error «en caliente», que transfiere las cargas de trabajo instantáneamente a un sistema de respaldo en funcionamiento. Si mantener un sistema en espera constantemente activo no es una opción, puedes usar la conmutación por error «en caliente» o «en frío», en la que un sistema de respaldo tarda en cargar y comenzar a ejecutar cargas de trabajo.
Tolerancia a fallos en la computación en la nube
La computación en la nube es un espacio que permite un desempeño robusto sin tener que preocuparse por los componentes. Es un servicio basado en el concepto de virtualización.
La tolerancia a fallas en la computación en la nube consiste en diseñar un plan para continuar el trabajo en curso siempre que algunas piezas no estén disponibles. Esto ayuda a las empresas a evaluar sus necesidades y requisitos de infraestructura y a proporcionar servicios cuando los dispositivos asociados no están disponibles debido a alguna causa. No significa que la disposición alternativa pueda proporcionar el 100% del servicio completo, pero este concepto mantiene el sistema en modo de ejecución a un nivel utilizable y, lo más importante, a un nivel razonable. Esto es importante para que las empresas sigan creciendo de manera continua y aumenten sus niveles de productividad.
- La reconfiguración elimina el componente defectuoso del sistema.
- La comprobación de puntos permite la continuación de una tarea desde donde se interrumpió.
- La migración de trabajos permite la migración de una tarea fallida a un sistema diferente.
Conceptos principales
Estos son los principales conceptos de la tolerancia a fallos en la computación en la nube:
Replicación
El sistema tolerante a fallas funciona con el concepto de ejecutar varias otras réplicas para todos y cada uno de los servicios. Por lo tanto, si una parte del sistema falla, tienes otras instancias que se pueden colocar en su lugar para mantenerlo en funcionamiento.
Tomemos, por ejemplo, un clúster de base de datos que tiene 3 servidores con la misma información en cada uno de ellos. Todas las acciones, como la inserción de datos, las actualizaciones y la eliminación, se escriben en cada una de ellas. Los servidores, que son redundantes, estarían en modo inactivo a menos que y hasta que cualquier sistema de tolerancia a fallas no exija su disponibilidad.
Redundancia
Cuando cualquier parte del sistema falla o se mueve hacia un estado descendente, entonces es importante tener sistemas de respaldo. Por ejemplo, un programa de sitio web que tiene MS SQL como base de datos puede fallar debido a alguna falla de hardware. Luego, se debe utilizar una nueva base de datos en el concepto de redundancia cuando el original está en modo fuera de línea. El servidor opera con la base de datos de emergencia que comprende varios servicios redundantes dentro.