Circuit Breaker es un patron de diseño que se utiliza en sistemas distribuidos para mejorar la resiliencia y la tolerancia a fallos. Se utiliza para detectar errores recurrentes en un sistema remoto y evitar la propagación de errores a través del sistema.
En esencia, un circuit breaker (CB) actúa como un interruptor que puede abrirse para evitar que una aplicación continúe interactuando con un servicio externo que está experimentando problemas o tiempos de espera prolongados. Al hacerlo, la aplicación puede recuperarse más rápidamente de los fallos y minimizar los efectos de los errores en el sistema en su conjunto.
Algunas situaciones en las que puede ser útil utilizar:
- Cuando se interactúa con servicios remotos que pueden experimentar problemas de disponibilidad o rendimiento.
- Cuando se realizan llamadas a bases de datos o sistemas de almacenamiento en la nube que pueden experimentar fallas o latencias.
- Cuando se utilizan bibliotecas de terceros que no son totalmente confiables o cuyo comportamiento es impredecible.
Aquí hay una guía general sobre cómo implementar un “Circuit Breaker”:
- Identificar los servicios o componentes externos: Identifica los servicios o componentes externos con los que tu sistema interactúa y que pueden experimentar fallos, como llamadas a APIs externas, bases de datos, servicios de terceros, etc.
- Establecer umbrales de error: Define umbrales de error, como la cantidad de errores o fallas consecutivas que se deben producir en un servicio o componente externo. Por ejemplo, si un servicio externo devuelve 3 errores consecutivos en un intervalo de tiempo determinado, se puede activar el “Circuit Breaker”.
- Implementar la lógica del “CB”: En tu código, implementa la lógica del “Circuit Breaker” para detectar los errores o fallas en los servicios o componentes externos y gestionarlos. Esto puede involucrar la monitorización de errores, la contabilización del número de errores consecutivos, y la activación o desactivación del “Circuit Breaker” en función de los umbrales establecidos.
- Gestionar el estado del “CB”: Cuando el “Circuit Breaker” se activa debido a un exceso de errores, puede cambiar su estado a “abierto”, lo que significa que las solicitudes a los servicios o componentes externos se bloquean temporalmente para evitar más errores. Después de un tiempo de espera predefinido, el “Circuit Breaker” puede cambiar su estado a “semiabierto”, lo que permite que algunas solicitudes se prueben para verificar si el servicio o componente externo ha recuperado su funcionamiento normal. Si las solicitudes de prueba tienen éxito, el “Circuit Breaker” se puede cerrar y volver a su estado normal. Si las solicitudes de prueba siguen fallando, el “Circuit Breaker” se puede mantener en estado “abierto” durante más tiempo.
- Implementar lógica de fallback: Para manejar la situación cuando el “CB” está en estado “abierto” y las solicitudes a los servicios o componentes externos están bloqueadas, se puede implementar lógica de fallback o de respaldo. Esto puede implicar la utilización de caché, la devolución de respuestas predeterminadas, la utilización de servicios alternativos, o la notificación de los usuarios o del equipo de operaciones sobre la situación.
- Monitorear y ajustar: Monitorea el estado del “CB” y realiza ajustes en los umbrales de error o en los tiempos de espera según sea necesario, en función del comportamiento y rendimiento del sistema y los servicios o componentes externos.
Referencia: https://microservices.io/patterns/reliability/circuit-breaker.html