Un fallo o fault causa la ocurrencia de un estado de error en el sistema. Esto eventualmente desencadena en un comportamiento incorrecto: falla o avería (failure). Se busca que todos los fallos (o errores) se encapsulen y que nunca se llegue a una falla.
Un fallo parcial ocurre cuando un componente de un sistema distribuido incurre en error. Es una característica distintiva de los sistemas distribuidos, y puede generar una reacción encadena que afecta al comportamiento del sistema completo.
Por ejemplo:
- Fallo: Un rayo cósmico cambia el estado de un bit en memoria.
- Error: Esto causa que un puntero apunte a una dirección inválida.
- Falla: Eventualmente, el programa accede a esta dirección de memoria inválida y morirá.
Otro ejemplo:
- Fallo: Un programa
Yno puede comunicarse con el programaXdebido a un fallo en la comunicación. - Error: El programa
Yhace un polling infinito con un timeout pequeño a programaX, dejando conexiones abiertas. - Falla: El programa
Yllega al límite de conexiones abiertas, y muere.
Clasificación de Fallos
Los fallos se clasifican en:
- Transientes: ocurren una vez y luego desaparecen; si se repite la operación, el fallo desaparece. Es un ello esporádico.
- Intermitentes: Ocurren de forma intermitente (irregular); son difíciles de diagnosticar.
- Permanentes: Existen hasta que los componentes defectuosos se reemplaza: por ejemplo, se rompe el disco.
Es importante entender la diferencia entre fallos improbables, y fallos imposibles: ¿Es imposible que una lluvia solar altere el estado de un sistema?
Otra forma de clasificar los fallos es:
- Crash: se detiene el servicio por completo.
- Timing: Se da una respuesta fuera de los tiempos aceptables.
- Omisión: El servicio falla al responder solicitudes entrantes.
- Respuesta: La respuesta es incorrecta.
- Bizantina: Es arbitraria en tiempos y respuesta; la información es diferente para distintos consumidores. A veces lo hace por motivos maliciosos.