Confiabilidad
La confiabilidad es la disciplina de mantenerse operativo cuando las cosas a tu alrededor fallan — porque fallarán. Diseña primero para fallos parciales; los caminos felices se cuidan solos.
Reglas
- Timeouts en cada llamada saliente. Sin excepciones. Un timeout faltante es un incidente de agotamiento del pool de hilos a punto de ocurrir.
- Reintentar solo operaciones idempotentes. Con retroceso exponencial y jitter. Reintentar un POST no idempotente crea duplicados, cobra tarjetas dos veces, envía dos correos.
- Claves de idempotencia en APIs públicas mutantes. Permite a los clientes reintentar de forma segura a través de fallos de red sin que tengas que adivinar.
- Circuit-breaker para dependencias externas. Cuando un servicio descendente está enfermo, fallar rápido protege tanto a ti como a él. Los reintentos ciegos convierten una interrupción en dos.
- Aislar caminos críticos. Aísla los pools de hilos / pools de conexión por servicio descendente para que uno lento no pueda ahogar todo el servicio.
- Degradación gradual es mejor que fallo duro. Sirve un caché obsoleto, una respuesta parcial o un conjunto reducido de funciones en lugar de un 500.
- Sin puntos únicos de fallo. Multi-AZ para cada componente con estado, múltiples réplicas para cada uno sin estado, verificaciones de salud del balanceador de carga que realmente detecten enfermedades.
- El apagado debe ser gradual. Drena las solicitudes en curso, cierra los pools, vacía los búferes. SIGTERM → dejar de aceptar → finalizar o cancelar → salir.
- Haz que sea seguro reiniciar en cualquier momento. Cualquier pod individual debe poder eliminarse en cualquier momento sin impacto visible para el usuario. Si no, ese es el error a corregir.
- Las copias de seguridad no están probadas hasta que restauras desde ellas. Realiza un simulacro de restauración real de forma programada.
Señales de alerta
restTemplate.exchange(...)sin timeout configurado.- Un bucle de reintento sin límite y sin retroceso.
- "Funciona si lo redeployas." (Estado oculto en memoria.)
- Despliegues zero-downtime que en realidad no lo son porque las solicitudes se pierden al recibir SIGTERM.
- Runbook de recuperación ante desastres que nunca se ha ejercitado.