La tolerancia a fallos es la capacidad de un sistema para contener la propagación de fallos (por ejemplo, un transistor averiado, un conector en cortocircuito o un bus de datos intermitente). Los fallos pueden manifestarse como errores (por ejemplo, un valor de datos erróneo o un mensaje faltante) que provocan un estado incorrecto del sistema. Los sistemas tolerantes a fallos enmascaran los errores y mantienen un funcionamiento sin fallos incluso en presencia de uno o más componentes defectuosos. Esta capacidad es esencial para sistemas de alta disponibilidad , de misión crítica o incluso de vida o muerte .
La tolerancia a fallos se refiere específicamente a la capacidad de un sistema para gestionar fallos sin degradación ni tiempo de inactividad. En caso de error, los usuarios finales no se percatan de ningún problema. Por el contrario, un sistema que experimenta errores con cierta interrupción del servicio o una degradación gradual del rendimiento se denomina «resiliente». En la resiliencia, el sistema se adapta al error, manteniendo el servicio pero reconociendo cierto impacto en el rendimiento.
Por lo general, la tolerancia a fallos describe los sistemas informáticos , asegurando que el sistema en su conjunto siga funcionando a pesar de los problemas de hardware o software . Ejemplos ajenos a la informática incluyen estructuras que conservan su integridad a pesar de los daños causados por la fatiga , la corrosión o los impactos.
Historia
La primera computadora tolerante a fallos conocida fue SAPO , construida en 1951 en Checoslovaquia por Antonín Svoboda . [ 1 ] : 155 Su diseño básico consistía en tambores magnéticos conectados mediante relés, con un método de votación para la detección de errores de memoria ( redundancia modular triple ). Varias otras máquinas se desarrollaron siguiendo esta línea, principalmente para uso militar. Finalmente, se separaron en tres categorías distintas:
- Máquinas que durarían mucho tiempo sin necesidad de mantenimiento, como las que se utilizan en las sondas espaciales y satélites de la NASA ;
- Computadoras que eran muy confiables pero que requerían monitoreo constante, como las utilizadas para monitorear y controlar centrales nucleares o experimentos con supercolisionadores ; y
- Ordenadores con una gran capacidad de procesamiento que estarían sometidos a un uso intensivo, como muchos de los superordenadores que utilizan las compañías de seguros para la monitorización de probabilidades .
La mayor parte del desarrollo de la denominada computación LLNM (Larga Vida, Sin Mantenimiento) fue realizada por la NASA durante la década de 1960, [ 2 ] en preparación para el Proyecto Apolo y otros aspectos de investigación. La primera máquina de la NASA se instaló en un observatorio espacial , y su segundo intento, la computadora JSTAR, se utilizó en la Voyager . Esta computadora contaba con una copia de seguridad de las matrices de memoria para utilizar métodos de recuperación de memoria, por lo que se la denominó computadora de autodiagnóstico y reparación del Laboratorio de Propulsión a Chorro. Podía detectar sus propios errores y corregirlos o utilizar módulos redundantes según fuera necesario. La computadora seguía en funcionamiento a principios de 2022. [ 3 ]
Las computadoras hiperconfiables fueron desarrolladas principalmente por fabricantes de aeronaves , [ 1 ] : 210 compañías de energía nuclear y la industria ferroviaria en los Estados Unidos. Estas entidades necesitaban computadoras con un tiempo de actividad masivo que fallaran de manera lo suficientemente controlada como para permitir la continuidad de las operaciones, a la vez que dependían de la supervisión humana constante de la salida de la computadora para detectar fallas. IBM desarrolló la primera computadora de este tipo para la NASA para la guía de los cohetes Saturno V. Posteriormente, BNSF , Unisys y General Electric construyeron las suyas. [ 1 ] : 223
En la década de 1970, se realizó mucho trabajo en este campo. [ 4 ] [ 5 ] [ 6 ] Por ejemplo, el F14 CADC tenía autodiagnóstico y redundancia incorporados. [ 7 ]
En general, los primeros esfuerzos en diseños tolerantes a fallos se centraron principalmente en el diagnóstico interno, donde un fallo indicaba que algo estaba fallando y un operario podía reemplazarlo. SAPO, por ejemplo, tenía un método mediante el cual los tambores de memoria defectuosos emitían un ruido antes de fallar. [ 8 ] Los esfuerzos posteriores demostraron que, para ser completamente efectivo, el sistema debía ser autorreparable y autodiagnosticarse: aislar un fallo e implementar una copia de seguridad redundante mientras alertaba sobre la necesidad de reparación. Esto se conoce como redundancia de modelo N, donde los fallos provocan mecanismos de seguridad automáticos y una advertencia al operador, y sigue siendo la forma más común de diseño tolerante a fallos de nivel uno en uso hoy en día.
Como se mencionó anteriormente, otro método inicial fue la votación, con múltiples sistemas de respaldo redundantes que operaban constantemente y verificaban los resultados de los demás. Por ejemplo, si cuatro componentes reportaban una respuesta de 5 y un componente reportaba una respuesta de 6, los otros cuatro "votarían" que el quinto componente estaba defectuoso y lo retirarían del servicio. Esto se conoce como votación por mayoría simple (M de N).
Históricamente, la tendencia ha sido alejarse del modelo N y acercarse al modelo M a partir de N, ya que la complejidad de los sistemas y la dificultad de garantizar que el estado transitorio de fallo negativo a fallo positivo no interrumpiera las operaciones.
Tandem Computers , en 1976 [ 9 ] y Stratus Technologies estuvieron entre las primeras empresas especializadas en el diseño de sistemas informáticos tolerantes a fallos para el procesamiento de transacciones en línea .
Ejemplos

La tolerancia a fallos de hardware a veces requiere que las piezas dañadas se retiren y se reemplacen por piezas nuevas mientras el sistema sigue operativo (en informática, esto se conoce como intercambio en caliente ). Un sistema de este tipo, implementado con una única copia de seguridad, se denomina tolerante a un solo punto y representa la gran mayoría de los sistemas tolerantes a fallos. En estos sistemas, el tiempo medio entre fallos debe ser lo suficientemente largo para que los operadores tengan tiempo suficiente para reparar los dispositivos dañados ( tiempo medio de reparación ) antes de que falle también la copia de seguridad. Si bien es conveniente que el tiempo entre fallos sea lo más largo posible, esto no es un requisito específico en un sistema tolerante a fallos.
La tolerancia a fallos ha demostrado ser especialmente eficaz en aplicaciones informáticas. Tandem Computers basó todo su negocio en este tipo de máquinas, que utilizaban la tolerancia a fallos de punto único para crear sus sistemas NonStop , con tiempos de actividad que se medían en años.
Las arquitecturas a prueba de fallos también pueden abarcar el software informático, por ejemplo, mediante la replicación de procesos .
Los formatos de datos también pueden diseñarse para degradarse de forma gradual. El lenguaje de marcado de hipertexto (HTML), por ejemplo, está diseñado para ser compatible con versiones futuras , lo que permite a los navegadores web ignorar las entidades HTML nuevas y no compatibles sin que el documento se vuelva inutilizable. Además, un diseño adecuado de la interfaz de usuario exige que los sitios web proporcionen una interfaz de usuario ligera y opcional que no dependa de JavaScript y tenga un diseño mínimo , para garantizar una amplia accesibilidad y alcance . [ 10 ]
Terminología

Un sistema altamente tolerante a fallos puede mantener el mismo nivel de rendimiento incluso si uno o más componentes fallan. Por ejemplo, un edificio con un generador eléctrico de respaldo suministrará el mismo voltaje a los enchufes incluso si falla el suministro eléctrico de la red.
Un sistema diseñado para funcionar a prueba de fallos , o con seguridad ante fallos, o fallar con elegancia , ya sea que funcione a un nivel reducido o falle por completo, lo hace de manera que protege a las personas, la propiedad o los datos de lesiones, daños, intrusiones o divulgación. En informática, un programa puede funcionar a prueba de fallos ejecutando una salida elegante (en contraposición a un fallo incontrolado) para evitar la corrupción de datos después de que ocurra un error. [ 11 ] Se hace una distinción similar entre "fallar bien" y " fallar mal ".
Un sistema diseñado para experimentar una degradación gradual , o para fallar suavemente (utilizado en informática, similar a "a prueba de fallos" [ 12 ] ), opera a un nivel reducido de rendimiento después de que falla algún componente. Por ejemplo, si falla el suministro eléctrico, un edificio puede operar la iluminación a niveles reducidos o los ascensores a velocidades reducidas. En informática, si no hay suficiente ancho de banda de red disponible para transmitir un vídeo en línea, se podría transmitir una versión de menor resolución en lugar de la versión de alta resolución. La mejora progresiva es otro ejemplo, donde las páginas web están disponibles en un formato funcional básico para navegadores web antiguos, de pantalla pequeña o con capacidades limitadas, pero en una versión mejorada para navegadores capaces de manejar tecnologías adicionales o que tienen una pantalla más grande.
En los sistemas informáticos tolerantes a fallos, los programas considerados robustos están diseñados para seguir funcionando a pesar de un error, una excepción o una entrada no válida, en lugar de fallar por completo. La fragilidad del software es lo opuesto a la robustez. Las redes resilientes continúan transmitiendo datos a pesar del fallo de algunos enlaces o nodos. Del mismo modo, se espera que los edificios e infraestructuras resilientes eviten el fallo total en situaciones como terremotos, inundaciones o colisiones.
Un sistema con alta transparencia ante fallos alertará a los usuarios de que se ha producido un fallo en un componente, incluso si este sigue funcionando con pleno rendimiento, de modo que se pueda reparar el fallo o anticipar un fallo completo inminente. [ 13 ] Del mismo modo, un componente de detección rápida de fallos está diseñado para informar en el primer punto de fallo, en lugar de generar informes cuando fallan los componentes posteriores. Esto permite un diagnóstico más sencillo del problema subyacente y puede prevenir un funcionamiento incorrecto en un estado defectuoso.
Una condición de falla única es una situación en la que un medio de protección contra un peligro está defectuoso. Si una condición de falla única resulta inevitablemente en otra condición de falla única, ambas fallas se consideran una sola condición de falla única. [ 14 ] Una fuente ofrece el siguiente ejemplo:
Una condición de falla única es una condición en la que un solo medio de protección contra riesgos en el equipo está defectuoso o se presenta una sola condición anormal externa, por ejemplo, un cortocircuito entre las partes activas y la parte aplicada. [ 15 ]
Criterios
Proporcionar un diseño tolerante a fallos para cada componente normalmente no es una opción. La redundancia asociada conlleva una serie de inconvenientes: aumento de peso, tamaño, consumo de energía, coste, así como tiempo para diseñar, verificar y probar. Por lo tanto, es necesario examinar varias opciones para determinar qué componentes deben ser tolerantes a fallos: [ 16 ]
- ¿Qué tan crítico es el componente? En un automóvil, la radio no es crítica, por lo que este componente tiene menos necesidad de tolerancia a fallas.
- ¿Qué probabilidad hay de que falle el componente? Algunos componentes, como el eje de transmisión de un automóvil, no suelen fallar, por lo que no se requiere tolerancia a fallos.
- ¿Qué tan costoso es hacer que el componente sea tolerante a fallas? Por ejemplo, requerir un motor de automóvil redundante probablemente sería demasiado costoso, tanto económicamente como en términos de peso y espacio, como para considerarlo.
Un ejemplo de un componente que supera todas las pruebas es el sistema de retención de ocupantes de un automóvil. Si bien normalmente no se piensa en el sistema principal de retención de ocupantes, este es la gravedad . Si el vehículo vuelca o experimenta fuerzas G severas, este método principal de retención de ocupantes puede fallar. Retener a los ocupantes durante un accidente de este tipo es absolutamente crucial para la seguridad, por lo que se supera la primera prueba. Los accidentes que causaban la eyección de los ocupantes eran bastante comunes antes de los cinturones de seguridad , por lo que se supera la segunda prueba. El costo de un método de retención redundante como los cinturones de seguridad es bastante bajo, tanto económicamente como en términos de peso y espacio, por lo que se supera la tercera prueba. Por lo tanto, agregar cinturones de seguridad a todos los vehículos es una excelente idea. Otros "sistemas de retención suplementarios", como las bolsas de aire , son más caros y, por lo tanto, superan esa prueba por un margen menor.
Otro excelente ejemplo a largo plazo de la aplicación de este principio es el sistema de frenado: si bien los mecanismos de frenado propiamente dichos son fundamentales, no son particularmente propensos a fallas repentinas (en lugar de progresivas) y, en cualquier caso, se duplican necesariamente para permitir una aplicación uniforme y equilibrada de la fuerza de frenado en todas las ruedas. Además, duplicar los componentes principales resultaría prohibitivamente costoso y añadiría un peso considerable. Sin embargo, los sistemas igualmente críticos para accionar los frenos bajo el control del conductor son inherentemente menos robustos, ya que generalmente utilizan un cable (que puede oxidarse, estirarse, atascarse o romperse) o fluido hidráulico (que puede tener fugas, hervir y formar burbujas, o absorber agua y, por lo tanto, perder eficacia). Así, en la mayoría de los coches modernos, el circuito hidráulico del freno de pie está dividido diagonalmente para ofrecer dos puntos de fallo más pequeños. La pérdida de cualquiera de ellos solo reduce la potencia de frenado en un 50%, sin causar un desequilibrio tan peligroso como una división directa entre los frenos delantero y trasero o entre los izquierdo y derecho. En caso de que el circuito hidráulico falle por completo (algo relativamente poco frecuente), existe un sistema de seguridad: el freno de estacionamiento accionado por cable, que activa los frenos traseros, que de otro modo serían relativamente débiles, y que puede detener el vehículo junto con el freno motor/transmisión, siempre que las exigencias sean acordes al flujo normal del tráfico. La improbable combinación de un fallo total del freno de pie y la necesidad de una frenada brusca en una emergencia probablemente provoque una colisión, pero a menor velocidad de la que se habría producido en otras circunstancias.
En comparación con el freno de servicio accionado por pedal, el freno de estacionamiento es un elemento menos crítico y, a menos que se utilice como respaldo puntual del freno de pie, no representa un peligro inmediato si se encuentra inoperativo en el momento de su aplicación. Por lo tanto, no incorpora redundancia propiamente dicha (y suele utilizar un sistema de accionamiento por cable más económico, ligero, pero menos resistente). Si esto ocurre en una pendiente, basta con usar el freno de pie para detener el vehículo momentáneamente antes de buscar un tramo llano donde parar. Alternativamente, en pendientes suaves, se puede cambiar la transmisión a la posición de estacionamiento, reversa o primera marcha, y usar el bloqueo de la transmisión o la compresión del motor para mantenerlo inmóvil, ya que no es necesario que incluyan la sofisticación de detener el vehículo por completo.
En las motocicletas, un nivel similar de seguridad se logra mediante métodos más sencillos. En primer lugar, los sistemas de freno delantero y trasero son completamente independientes, independientemente de su método de activación (que puede ser por cable, varilla o hidráulico), lo que permite que un sistema falle por completo sin afectar al otro. En segundo lugar, el freno trasero es relativamente potente en comparación con el de los automóviles, siendo un disco robusto en algunos modelos deportivos, aunque lo habitual es que el sistema delantero proporcione la mayor parte de la fuerza de frenado. Dado que el peso total del vehículo está más centrado, el neumático trasero suele ser más grande y tiene mejor tracción, lo que permite al conductor inclinarse hacia atrás para ejercer más presión sobre él y, por lo tanto, aplicar mayor fuerza de frenado antes de que la rueda se bloquee. En las máquinas utilitarias más baratas y lentas, incluso si la rueda delantera debería usar un disco hidráulico para una mayor fuerza de frenado y una instalación más sencilla, la trasera suele ser un tambor accionado por varilla, primitivo, algo ineficiente, pero excepcionalmente robusto, gracias a la facilidad de conectar el pedal a la rueda de esta manera y, lo que es más importante, a la casi imposibilidad de una falla catastrófica incluso si el resto de la máquina, como muchas bicicletas de bajo precio después de sus primeros años de uso, está a punto de colapsar por falta de mantenimiento.
Requisitos
Las características básicas de la tolerancia a fallos requieren:
- Ningún punto único de fallo : si un sistema sufre un fallo, debe seguir funcionando sin interrupción durante el proceso de reparación.
- Aislamiento de fallas al componente defectuoso: Cuando ocurre una falla, el sistema debe poder aislarla al componente responsable. Esto requiere la incorporación de mecanismos de detección de fallas específicos que existen únicamente para el aislamiento de fallas. La recuperación de una condición de falla requiere clasificar la falla o el componente defectuoso. Las fallas se suelen categorizar según su ubicación (interna o externa al sistema), causa (natural o provocada por el hombre), duración (permanente o transitoria) y efecto en el comportamiento del sistema. [ 17 ]
- Contención de fallos para evitar su propagación: Algunos mecanismos de fallo pueden provocar el fallo de un sistema al propagarlo al resto del mismo. Un ejemplo de este tipo de fallo es el "transmisor no autorizado", que puede interferir en la comunicación legítima del sistema y provocar su fallo general. Se requieren cortafuegos u otros mecanismos que aíslen un transmisor no autorizado o un componente defectuoso para proteger el sistema.
- Disponibilidad de modos de reversión , que consisten en el abandono de cambios recientes, generalmente de software, que permiten que un sistema vuelva a un comportamiento y funcionamiento razonablemente adecuados.
Además, los sistemas tolerantes a fallos se caracterizan por la presencia de interrupciones del servicio, tanto planificadas como no planificadas. Estas se suelen medir a nivel de aplicación y no solo a nivel de hardware. El indicador de rendimiento se denomina disponibilidad y se expresa como un porcentaje. Por ejemplo, un sistema con una disponibilidad del 99,999% proporcionaría estadísticamente una disponibilidad del 99,999%.
Los sistemas tolerantes a fallos se basan normalmente en el concepto de redundancia.
Técnicas de tolerancia a fallos
La investigación sobre los tipos de tolerancias necesarias para sistemas críticos implica una gran cantidad de trabajo interdisciplinario. Cuanto más complejo sea el sistema, con mayor cuidado se deben considerar y preparar todas las interacciones posibles. Dada la importancia de los sistemas de alto valor en el transporte, los servicios públicos , las finanzas, la seguridad pública y el ámbito militar, el campo de temas que abarca la investigación es muy amplio: puede incluir temas tan obvios como el modelado y la fiabilidad del software, o el diseño de hardware , hasta elementos más complejos como los modelos estocásticos , la teoría de grafos , la lógica formal o excluyente, el procesamiento paralelo , la transmisión remota de datos , entre otros. [ 18 ]
Replicación
Los componentes de repuesto abordan la primera característica fundamental de la tolerancia a fallos de tres maneras:
- Replicación : Proporcionar múltiples instancias idénticas del mismo sistema o subsistema, dirigir tareas o solicitudes a todas ellas en paralelo y elegir el resultado correcto en función de un quórum ;
- Redundancia : Proporcionar múltiples instancias idénticas del mismo sistema y cambiar a una de las instancias restantes en caso de fallo ( conmutación por error );
- Diversidad: Proporcionar múltiples implementaciones diferentes de la misma especificación y utilizarlas como sistemas replicados para hacer frente a los errores en una implementación específica.
Todas las implementaciones de RAID , matriz redundante de discos independientes , excepto RAID 0, son ejemplos de un dispositivo de almacenamiento tolerante a fallos que utiliza redundancia de datos .
Una máquina tolerante a fallos de sincronización utiliza elementos replicados que operan en paralelo. En todo momento, todas las réplicas de cada elemento deben estar en el mismo estado. Se proporcionan las mismas entradas a cada réplica y se esperan las mismas salidas. Las salidas de las réplicas se comparan mediante un circuito de votación. Una máquina con dos réplicas de cada elemento se denomina redundante modular dual (DMR). En este caso, el circuito de votación solo puede detectar una discrepancia y la recuperación depende de otros métodos. Una máquina con tres réplicas de cada elemento se denomina redundante modular triple (TMR). El circuito de votación puede determinar qué réplica es errónea cuando se observa una votación de dos a uno. En este caso, el circuito de votación puede emitir el resultado correcto y descartar la versión errónea. Posteriormente, se asume que el estado interno de la réplica errónea es diferente al de las otras dos, y el circuito de votación puede cambiar al modo DMR. Este modelo se puede aplicar a cualquier número mayor de réplicas.
Las máquinas tolerantes a fallos con sincronización directa se logran más fácilmente con sincronización completa , de modo que cada puerta de cada réplica realice la misma transición de estado en el mismo flanco del reloj, y los relojes de las réplicas estén exactamente en fase. Sin embargo, es posible construir sistemas con sincronización directa sin este requisito.
Para sincronizar las réplicas, es necesario que sus estados internos almacenados sean idénticos. Se pueden iniciar desde un estado inicial fijo, como el estado de reinicio. Alternativamente, el estado interno de una réplica se puede copiar a otra.
Una variante de DMR es el sistema de pares y repuestos . Dos elementos replicados operan en sincronía como un par, con un circuito de votación que detecta cualquier discrepancia entre sus operaciones y emite una señal que indica que hay un error. Otro par opera exactamente de la misma manera. Un circuito final selecciona la salida del par que no indica que hay un error. El sistema de pares y repuestos requiere cuatro réplicas en lugar de las tres de TMR, pero se ha utilizado comercialmente.
computación que ignora los fallos
La computación que ignora los fallos es una técnica que permite que los programas informáticos continúen ejecutándose a pesar de los errores . [ 19 ] La técnica se puede aplicar en diferentes contextos. Puede manejar lecturas de memoria no válidas devolviendo un valor fabricado al programa, [ 20 ] que a su vez, utiliza el valor fabricado e ignora el valor de memoria anterior al que intentó acceder, lo que contrasta enormemente con los típicos verificadores de memoria , que informan al programa del error o abortan el programa.
El enfoque tiene costos de rendimiento: debido a que la técnica reescribe el código para insertar comprobaciones dinámicas de validez de la dirección, el tiempo de ejecución aumentará entre un 80 % y un 500 %. [ 21 ]
acompañamiento en la recuperación
La recuperación controlada es una técnica ligera que permite a los programas de software recuperarse de errores que de otro modo serían fatales, como la desreferenciación de punteros nulos y la división por cero. [ 22 ] En comparación con la técnica de computación ajena a fallos, la recuperación controlada funciona directamente sobre el binario del programa compilado y no necesita recompilarlo.
Utiliza el marco de instrumentación binaria justo a tiempo Pin . Se adjunta al proceso de la aplicación cuando ocurre un error, repara la ejecución, realiza un seguimiento de los efectos de la reparación mientras la ejecución continúa, contiene los efectos de la reparación dentro del proceso de la aplicación y se desvincula del proceso una vez que todos los efectos de la reparación se han eliminado del estado del proceso. No interfiere con la ejecución normal del programa y, por lo tanto, genera una sobrecarga insignificante. [ 22 ] Para 17 de 18 errores de desreferenciación nula y división por cero del mundo real recopilados sistemáticamente, una implementación prototipo permite que la aplicación continúe ejecutándose para proporcionar una salida y un servicio aceptables a sus usuarios en las entradas que desencadenan el error. [ 22 ]
Cortacircuitos
El patrón de diseño de interruptor automático es una técnica para evitar fallos catastróficos en sistemas distribuidos.
Redundancia
La redundancia consiste en proporcionar capacidades funcionales que serían innecesarias en un entorno sin fallos. [ 23 ] Esto puede consistir en componentes de respaldo que se activan automáticamente si falla un componente. Por ejemplo, los camiones de carga pesada pueden perder un neumático sin mayores consecuencias. Tienen muchos neumáticos, y ninguno es crítico (con la excepción de los delanteros, que se utilizan para la dirección, pero que generalmente soportan menos carga, tanto individualmente como en conjunto, que los otros cuatro a dieciséis, por lo que es menos probable que fallen). La idea de incorporar redundancia para mejorar la fiabilidad de un sistema fue impulsada por John von Neumann en la década de 1950. [ 24 ]
Existen dos tipos de redundancia posibles: [ 25 ] redundancia espacial y redundancia temporal. La redundancia espacial proporciona componentes, funciones o datos adicionales que no son necesarios para un funcionamiento sin fallos. La redundancia espacial se clasifica además en redundancia de hardware, software e información, según el tipo de recursos redundantes añadidos al sistema. En la redundancia temporal, el cálculo o la transmisión de datos se repite y el resultado se compara con una copia almacenada del resultado anterior. La terminología actual para este tipo de pruebas se denomina Prueba de Tolerancia a Fallos en Servicio o ISFTT, por sus siglas en inglés.
Desventajas
Las ventajas del diseño tolerante a fallos son obvias, mientras que muchas de sus desventajas no lo son:
- Interferencia con la detección de fallos en el mismo componente. Siguiendo con el ejemplo del vehículo de pasajeros, con cualquiera de los sistemas tolerantes a fallos, es posible que el conductor no se dé cuenta de que un neumático está pinchado. Esto suele solucionarse con un sistema de detección de fallos automatizado independiente. En el caso del neumático, un monitor de presión de aire detecta la pérdida de presión y avisa al conductor. La alternativa es un sistema de detección de fallos manual, como la inspección manual de todos los neumáticos en cada parada.
- Interferencia con la detección de fallos en otro componente. Otra variante de este problema se presenta cuando la tolerancia a fallos de un componente impide la detección de fallos en otro. Por ejemplo, si el componente B realiza alguna operación basándose en la salida del componente A, la tolerancia a fallos de B puede ocultar un problema en A. Si posteriormente se modifica el componente B (a un diseño menos tolerante a fallos), el sistema puede fallar repentinamente, dando la impresión de que el problema reside en el nuevo componente B. Solo tras un análisis exhaustivo del sistema se podrá determinar que el problema de raíz se encuentra en el componente A.
- Reducción de la prioridad de corrección de fallos. Incluso si el operador es consciente del fallo, contar con un sistema tolerante a fallos probablemente reduzca la importancia de su reparación. Si los fallos no se corrigen, esto acabará provocando un fallo del sistema, ya sea cuando el componente tolerante a fallos falle por completo o cuando todos los componentes redundantes también fallen.
- Dificultad en las pruebas. Para ciertos sistemas críticos tolerantes a fallos, como un reactor nuclear , no existe una forma sencilla de verificar que los componentes de respaldo funcionen correctamente. El ejemplo más tristemente célebre es el desastre de Chernóbil , donde los operadores probaron el sistema de refrigeración de emergencia desactivando la refrigeración primaria y secundaria. El sistema de respaldo falló, lo que provocó la fusión del núcleo y una liberación masiva de radiación.
- Costo. Tanto los componentes tolerantes a fallos como los redundantes tienden a incrementar el costo. Este puede ser un costo puramente económico o puede incluir otros factores, como el peso. Las naves espaciales tripuladas , por ejemplo, cuentan con tantos componentes redundantes y tolerantes a fallos que su peso aumenta drásticamente en comparación con los sistemas no tripulados, que no requieren el mismo nivel de seguridad.
- Componentes de baja calidad. Un diseño tolerante a fallos puede permitir el uso de componentes de baja calidad que, de otro modo, habrían inutilizado el sistema. Si bien esta práctica puede mitigar el aumento de costes asociado a la tolerancia a fallos, el uso de múltiples componentes de baja calidad puede reducir la fiabilidad del sistema a un nivel igual o incluso inferior al de un sistema comparable no tolerante a fallos.
Términos relacionados
Existe una diferencia entre la tolerancia a fallos y los sistemas que rara vez presentan problemas. Por ejemplo, los sistemas de interconexión de Western Electric tenían una tasa de fallos de dos horas cada cuarenta años, por lo que eran altamente resistentes a fallos . Pero cuando se producía un fallo, dejaban de funcionar por completo, por lo que no eran tolerantes a fallos .
Véase también
- Tolerancia a fallos bizantinos : resiliencia de un sistema tolerante a fallos frente a fallos bizantinos.
- Reconfiguración del control : un enfoque en la teoría de control para lograr un control tolerante a fallos en sistemas dinámicos.
- Tolerancia al daño : Capacidad de una estructura para soportar defectos de forma segura hasta que pueda ser reparada.
- Redundancia de datos : excedente de datos informáticos para la corrección de errores.
- Defensa en profundidad : estrategia militar
- Resiliencia ecológica : capacidad de los ecosistemas para resistir y recuperarse de los cambios.
- Degradación elegante : mantener la funcionalidad completa a través de daños permanentes.
- Detección y corrección de errores : métodos fiables de entrega de datos digitales en canales poco fiables.
- Diseño tolerante a errores : diseño que no penaliza los errores del usuario ( diseño tolerante a errores humanos ).
- A prueba de fallos : característica o práctica de diseño
- Semántica de fallos : se utiliza para clasificar errores en sistemas distribuidos.
- Retroceso y avance : protocolo de módem para una gestión eficiente de la conectividad.
- Salida elegante : modismo de programación simple en un programa para detectar y gestionar una condición de error grave.
- Tolerancia a intrusiones : diseño tolerante a fallos para la protección de sistemas de información.
- Lista de atributos de calidad del sistema : requisitos no funcionales para la evaluación del sistema.
- Mejora progresiva : estrategia de diseño web que prioriza el contenido web.
- Resiliencia (de red) : Capacidad de una red para permanecer funcional durante fallos.
- Robustez (informática) : Capacidad de un sistema informático para hacer frente a errores durante la ejecución.
- Reversión (gestión de datos) : operación de base de datos que restaura un estado anterior.
- Autogestión (informática) – Sistemas para la gestión informática sin intervención humana
- Software que solo se ejecuta en caso de fallo: programas informáticos que gestionan los fallos reiniciándose.
Referencias
- 1 2 3 Siewiorek, Daniel P.; Bell, C. Gordon; Newell, Allen (1982). Estructuras de computadoras: principios y ejemplos . McGraw-Hill . ISBN 0-07-057302-6.
- ↑ Avižienis, Algirdas; Gilley, George C.; Mathur, Francis P.; Rennels, David A.; Rohr, John A.; Rubin, David K. "La computadora STAR (Autoprueba y Reparación): una investigación de la teoría y la práctica del diseño de computadoras tolerantes a fallas" (PDF) .
- ↑ "Estado de la misión Voyager (en la mayoría de los casos con al menos tres meses de antigüedad)" . NASA . Consultado el 1 de abril de 2022 .
- ↑ Randell, Brian ; Lee, PA; Treleaven, PC (junio de 1978). "Problemas de fiabilidad en el diseño de sistemas informáticos" . ACM Computing Surveys . 10 (2): 123–165 . doi : 10.1145/356725.356729 . ISSN 0360-0300 . S2CID 16909447 .
- ↑ Denning, PJ (diciembre de 1976). "Sistemas operativos tolerantes a fallos" . ACM Computing Surveys . 8 (4): 359– 389. doi : 10.1145/356678.356680 . ISSN 0360-0300 . S2CID 207736773 .
- ↑ Linden, Theodore A. (diciembre de 1976). "Estructuras de sistemas operativos para respaldar la seguridad y el software confiable" . ACM Computing Surveys . 8 (4): 409– 445. doi : 10.1145/356678.356682 . hdl : 2027/mdp.39015086560037 . ISSN 0360-0300 . S2CID 16720589 .
- ↑ Holt, Ray M. (1998-09-22). "The F14A Central Air Data Computer and the LSI Technology State-of-the-Art in 1968Search" (PDF) . firstmicroprocessor.com . Recuperado el 16 de diciembre de 2025 .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace ) - ↑ Neilforoshan, MR. Computación tolerante a fallos en el diseño de computadoras. Archivo de la Revista de Ciencias de la Computación en Colegios, Volumen 18, Número 4 (abril de 2003), págs. 213–220, ISSN 1937-4771 .
- ↑ "Historia de TANDEM COMPUTERS, INC" . FundingUniverse . Consultado el 1 de marzo de 2023 .
- ↑ Nathaniel (17 de marzo de 2021). "Por qué tu sitio web debería funcionar sin JavaScript" . Comunidad DEV . Consultado el 16 de mayo de 2021 .
- ↑ Hudak, JJ; Suh, B.-H.; Siewiorek, DP; Segall, Z. (1993). "Evaluación y comparación de técnicas de software tolerantes a fallos". IEEE Transactions on Reliability . 42 (2): 190– 204. doi : 10.1109/24.229487 . ISSN 1558-1721 .
- ↑ Stallings, W. (2009): Sistemas operativos. Principios internos y de diseño , sexta edición.
- ↑ Thampi, Sabu M. (23-11-2009). "Introducción a los sistemas distribuidos". arXiv : 0911.4395 [ cs.DC ].
- ↑ "Control" . IEEE . Archivado del original el 8 de octubre de 1999. Consultado el 6 de abril de 2016 .
- ↑ Baha Al-Shaikh, Simon G. Stacey, Fundamentos del equipamiento en anestesia, cuidados intensivos y medicina perioperatoria (2017), pág. 247.
- ^ Dubrova, E. (2013). "Diseño tolerante a fallos", Springer, 2013, ISBN 978-1-4614-2112-2.
- ↑ Avizienis, Algirdas; Laprie, Jean-Claude; Randell, Brian; Landwehr, Carl (2004). "Conceptos básicos y taxonomía de la computación confiable y segura". IEEE Transactions on Dependable and Secure Computing . 1 (1): 11– 33. doi : 10.1109/TDSC.2004.2 . hdl : 20.500.12259/40395 . ISSN 1545-5971 .
- ↑ Evaluación de la fiabilidad de algunas arquitecturas informáticas tolerantes a fallos . Springer-Verlag. Noviembre de 1980. ISBN 978-3-540-10274-8.
- ↑ Herzberg, Amir; Shulman, Haya (2012). "Computación bipartita asistida por servidor, imparcial y sin conocimiento previo" . Séptima Conferencia Internacional sobre Disponibilidad, Fiabilidad y Seguridad de 2012. IEEE. págs. 75–84 . doi : 10.1109/ares.2012.28 . ISBN 978-1-4673-2244-7. S2CID 6579295 .
- ↑ Rigger, Manuel; Pekarek, Daniel; Mössenböck, Hanspeter (2018), "Computación ajena a fallos y consciente del contexto como medio para prevenir desbordamientos de búfer" , Seguridad de redes y sistemas , Lecture Notes in Computer Science, vol. 11058, Cham: Springer International Publishing, pp. 376–390 , arXiv : 1806.09026 , doi : 10.1007/978-3-030-02744-5_28 , ISBN 978-3-030-02743-8, consultado el 7 de octubre de 2020
- ↑ Keromytis, Angelos D. (2007), "Caracterización de sistemas de autorreparación de software" , en Gorodetski, Vladimir I.; Kotenko, Igor; Skormin, Victor A. (eds.), Caracterización de sistemas de autorreparación de software , Seguridad de redes informáticas: Cuarta Conferencia Internacional sobre Métodos Matemáticos, Modelos y Arquitecturas para la Seguridad de Redes Informáticas, Springer , ISBN 978-3-540-73985-2.
- 1 2 3 Long, Fan; Sidiroglou-Douskos, Stelios; Rinard, Martin (2014). "Reparación y contención automática de errores en tiempo de ejecución mediante la gestión de la recuperación". Actas de la 35.ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación . PLDI '14'. Nueva York, Nueva York, EE. UU.: ACM. págs. 227–238 . doi : 10.1145/2594291.2594337 . ISBN 978-1-4503-2784-8. S2CID 6252501 .
- ↑ Laprie, JC (1985). " Computación confiable y tolerancia a fallas: conceptos y terminología ", Actas del 15.º Simposio Internacional sobre Computación Tolerante a Fallas (FTSC-15), págs. 2-11.
- ↑ von Neumann, J. (1956). " Lógicas probabilísticas y síntesis de organismos fiables a partir de componentes poco fiables ", en Automata Studies, eds. C. Shannon y J. McCarthy, Princeton University Press, pp. 43–98.
- ↑ Avizienis, A. (1976). " Sistemas tolerantes a fallos ", IEEE Transactions on Computers, volumen 25, número 12, pp. 1304–1312.
- Tolerancia a fallos
- Ingeniería de confiabilidad
- Sistemas informáticos
- Ingeniería de control
- Ingeniería de sistemas
- Calidad del software
- RAID