¿Te ha pasado que cuando compras con tu tarjeta de débito en un POS, el pago genera un error, pero aun así se debita el dinero de tu cuenta? O tal vez intentaste hacer una transferencia bancaria y la app del banco se quedó colgada, sin darte una respuesta clara sobre si la operación se realizó o no.
Estos problemas ocurren porque los sistemas no siempre responden de manera predecible. A veces, un servicio tarda demasiado en responder, se congestiona o incluso falla, causando inconsistencias y afectando la experiencia del usuario. Aquí es donde entra en acción el patrón Circuit Breaker.
Así como los fusibles en una instalación eléctrica protegen el sistema cortando la corriente cuando detectan sobrecarga, el patrón Circuit Breaker protege los sistemas distribuidos evitando que se realicen llamadas innecesarias a servicios que están fallando.
En este artículo, exploraremos cómo funciona este patrón, sus estados y cuándo aplicarlo en arquitecturas basadas en microservicios.
¿Qué es el Patrón Circuit Breaker?
El patrón Circuit Breaker es un mecanismo de protección en arquitecturas distribuidas que evita que un servicio haga repetidas llamadas a otro servicio que está fallando o que tiene tiempos de respuesta muy altos. Su objetivo es mejorar la resiliencia del sistema, reduciendo el impacto de fallos y evitando la sobrecarga de componentes.
El nombre "Circuit Breaker" proviene de los fusibles eléctricos, que cortan el flujo de corriente cuando detectan una sobrecarga para evitar daños mayores. En software, este patrón actúa de manera similar, interrumpiendo solicitudes a servicios problemáticos y permitiendo la recuperación gradual cuando la situación mejora.
¿Por qué usar el Patrón Circuit Breaker?
En arquitecturas distribuidas, los servicios dependen de múltiples componentes. Un fallo en un solo servicio puede generar un efecto dominó, afectando el rendimiento de toda la aplicación. Algunos problemas que pueden ocurrir si no se implementa el Circuit Breaker son:
- Latencia extrema: Si un servicio tarda demasiado en responder, otros servicios pueden quedarse esperando y agotar sus recursos.
- Fallo en cascada: Un servicio sobrecargado puede hacer que otros también fallen, generando un colapso total del sistema.
- Peticiones innecesarias: Sin un control, un servicio en mal estado podría seguir recibiendo miles de solicitudes, empeorando su rendimiento.
El Circuit Breaker ayuda a mitigar estos problemas al bloquear las solicitudes a un servicio que está fallando y permitir su recuperación antes de volver a enviar peticiones.
Estados del Circuit Breaker
Supongamos que tenemos un microservicio de pagos encargado de procesar transacciones con tarjetas de crédito y débito. Este microservicio se comunica con un proveedor externo de pagos, como Visa, Mastercard o PayPal. Veamos como actúa el patrón Circuit Breaker en el microservicio.
El Circuit Breaker funciona con tres estados principales:
1️⃣ Estado Inicial: Closed (Cerrado)
📌 El microservicio de pagos funciona normalmente. Todas las solicitudes se envían al proveedor de pagos sin restricciones.
Ejemplo:
Un cliente intenta pagar con su tarjeta de crédito. El microservicio de pagos envía la solicitud al proveedor externo. Si la respuesta es exitosa, la transacción se completa.
2️⃣ Estado Open (Abierto)
📌 Si la cantidad de errores supera un umbral (por ejemplo, 5 fallos consecutivos en menos de 1 minuto), el Circuit Breaker cambia a Open.
Consecuencias:
- Se bloquean las nuevas solicitudes de pago.
- Se evita que un servicio sobrecargado o inactivo reciba más peticiones.
- Se inicia un temporizador (por ejemplo, 30 segundos) antes de volver a intentar.
Ejemplo:
Si Visa tiene un problema y no responde en 5 intentos seguidos, el Circuit Breaker entra en estado Open.
Un cliente intenta hacer una compra con su tarjeta, pero el sistema le muestra un mensaje como: "El servicio de pagos no está disponible en este momento. Inténtelo más tarde."
3️⃣ Estado Half-Open (Semiabierto)
📌 Cuando el temporizador expira, el Circuit Breaker cambia a Half-Open y permite una única solicitud de prueba.
Caso 1: Si el pago es exitoso → Volvemos a Closed
El problema con el proveedor se ha solucionado. Se restablece el contador de errores a cero. Se reanudan todas las transacciones normalmente.Caso 2: Si el pago falla de nuevo → Volvemos a Open
Se reinicia el temporizador. El servicio de pagos sigue inestable, por lo que se bloquean nuevamente las solicitudes.
Cuándo Usar Circuit Breaker
El Circuit Breaker es útil cuando:
- Interacción con servicios externos: Evita depender de servicios que pueden estar fuera de nuestro control.
- Servicios con alta latencia: Previene tiempos de espera largos y bloqueos en la aplicación.
- Prevención de fallos en cascada: Protege al sistema de colapsos masivos.
- Optimización de recursos: Evita desperdiciar CPU y memoria en solicitudes a servicios caídos.
Conclusión
El patrón Circuit Breaker es una estrategia clave en arquitecturas resilientes, especialmente en microservicios y sistemas distribuidos. Actúa como un "fusible", protegiendo el sistema de fallos en cascada, mejorando la estabilidad y asegurando una mejor experiencia para los usuarios. Implementarlo correctamente permite manejar fallos de manera eficiente y evitar problemas graves en aplicaciones críticas.
Top comments (0)