En sistemas distribuidos y arquitecturas de microservicios, el escenario más peligroso no es que un servicio caiga por completo, sino que se vuelva lento. Un servicio caído devuelve Connection Refused al instante y libera recursos; en cambio, un servicio lento asfixia silenciosamente a todos los sistemas que lo llaman.
La trampa del servicio lento y el Cascading Failure
Imagina que un servicio de pagos o envíos pasa de responder en 150ms a tardar 15 segundos por un bloqueo en la base de datos:
- Agotamiento del Pool de Hilos (Thread Pool Exhaustion): El API Gateway asigna un hilo por cada petición entrante y queda bloqueado esperando respuesta.
- Acumulación de colas: Llegan cientos de peticiones nuevas cada segundo mientras ningún hilo se libera durante
15 segundos. En pocos instantes, la memoria y los hilos del servidor se agotan por completo. - Efecto Dominó (Cascading Failure): Endpoints que no tienen nada que ver con ese servicio (como "Búsqueda de productos" o "Perfil de usuario") dejan de responder por falta de hilos disponibles.
La solución: El patrón Circuit Breaker (Disyuntor)
Al igual que el disyuntor eléctrico de una casa corta la corriente ante una sobrecarga para evitar un incendio, el patrón Circuit Breaker envuelve las llamadas a servicios externos y monitorea la tasa de fallos y tiempos de espera en tres estados:
1. Closed (Cerrado — Flujo normal)
El tráfico fluye con normalidad hacia el servicio destino. En segundo plano se registran las métricas de error (5xx) y timeout. Mientras no se supere el umbral (por ejemplo, 50 %), el circuito permanece cerrado.
2. Open (Abierto — Fail-Fast y Fallback)
Cuando la tasa de fallos supera el umbral, el disyuntor salta al estado Open.
- Las peticiones no se envían al servicio lento.
- En lugar de esperar
15 segundos, el sistema responde en1ms(Fail-Fast) o ejecuta un Fallback (por ejemplo, devolviendo datos en caché desde Redis). - Así se protegen los recursos del sistema principal y se da respiro al servicio saturado.
3. Half-Open (Semiabierto — Prueba controlada)
Tras un tiempo de espera (resetTimeout, p. ej. 30 segundos), el circuito pasa a Half-Open.
- Solo se permite el paso de unas pocas peticiones de prueba.
- Si responden con éxito, el circuito vuelve a Closed (Self-Healing). Si fallan, regresa inmediatamente a Open.
En producción, herramientas como Resilience4j (Java), Polly (.NET), Opossum (Node.js) o Envoy / Istio Service Mesh implementan este patrón de forma nativa.
Hoja de ruta y herramienta interactivas
System Design: escalar a un millón de usuarios
Añadir servidores no basta: un mapa de System Design, etapa por etapa, de por qué los sistemas se caen en un día grande y cómo se recorta la carga antes de que llegue a la base de datos.
¿SQL o NoSQL?
Responde seis preguntas y te diré qué tipo de base de datos encaja con tu proyecto, y por qué.
Sigue leyendo
- CZES¿Qué es el error CORS y a quién protege realmente? (Same-Origin Policy y Preflight OPTIONS)
¿Qué es el error CORS y a quién protege realmente? (Same-Origin Policy y Preflight OPTIONS)
30 de octubre de 2026 · 2 min de lectura - CZESCortando el ruido: ¿qué lenguaje y framework de backend deberías elegir en 2026?
Cortando el ruido: ¿qué lenguaje y framework de backend deberías elegir en 2026?
25 de octubre de 2026 · 4 min de lectura