Tu microservicio Spring Boot llama a 5 servicios downstream. Cuando uno se cae, el timeout cascadea y tumba todo. ¿Cómo diseñas la resiliencia?
Contexto
E-commerce con checkout que llama a: inventory, pricing, payments, shipping, notifications. Si payments tarda 30s, el request del usuario también tarda 30s. El SLA es 2 segundos.
Respuesta modelo
Diseño resiliente con Resilience4j: 1) Circuit Breaker por cada servicio downstream con umbrales independientes. 2) Timeouts agresivos: 500ms para servicios no-críticos, 2s para payments. 3) Bulkhead: cada servicio downstream tiene su propio thread pool limitado (no comparten). 4) Fallbacks: si inventory falla, usar cache de stock. Si notifications falla, encolar para retry. 5) Retry solo para errores transitorios (5xx), no para 4xx. Exponential backoff. 6) Health check: endpoint /health reporta el estado de cada circuito. 7) Para notifications: patrón fire-and-forget con message queue.
Claves
- Circuit Breaker + Bulkhead + Timeout por cada dependencia.
- Fallbacks graceful: degradar funcionalidad, no fallar completamente.
- Separar servicios críticos (payments) de no-críticos (notifications).