La tolerancia a fallos estudia las necesidades de los sistemas confiables (dependable systems):
- Busca garantizar que se ejecuten y comporten de acuerdo a lo esperado por el usuario en distintas condiciones.
- Busca prevenir la aparición de fallas de cara al usuario, tanto normales como excepcionales.
- Hay distintas alternativas para prevenir o tolerar cada situación.
La idea es que el sistema nunca salga de estados definidos. Todo escenario debe estar contemplado, y debe haber una forma para volver al flujo habitual.
Se permite definir la inversión y el nivel de tolerancia para cada tipo de sistema.
Algunas herramientas para lograr esto son:
- Recuperación.
- Redundancia (ej. replicación).
- Consenso (ej. esquema de votación)
En presencia de fallos, el sistema distribuidos continúa operando de forma aceptable
Condiciones de Trabajo
Para definir el nivel de tolerancia a fallos de un sistema, es necesario indicar en que condiciones opera el sistema.
Las condiciones se pueden separar en dos tipos:
- Condiciones del entorno:
- Entorno físico del hardware, como temperatura, polvo, etc.
- Interferencia y ruido.
- Drift del reloj.
- Condiciones operacionales:
- Especificaciones, valores límite y tiempos de respuesta.
- Ancho de banda, latencia
- Protocolos soportado
Estrategias de Manejo de Fallos
Hay distintas estrategias para manejar los fallos:
- Fault removal: Eliminar los errores antes de que sucedan. Por ejemplo: estrategias de code correction para evitar cambios de bits.
- Fault prevention: Evitar las condiciones que llevan a los errores. Por ejemplo: con componentes que impidan que haya fallos (relojes atómicos, componentes de grado militar).
- Fault forecasting: Determinar la probabilidad de que un componente pueda fallar, y reemplazarlo. Por ejemplo: reemplazar componentes cada cierta cantidad de horas de uso.
- Fault tolerance: Procesas los errores del sistema, en lugar de evitar que sucedan. Es la estrategia más común en software.