Circuit Breaker Pattern (Patrón de corta circuito)

@gusariotti
Naranja X Tech
Published in
2 min readFeb 5, 2022

Hoy en día todos los sistemas que desarrollamos necesitan hacer llamadas remotas para comunicarse con las distintas partes que lo componen o bien con otros sistemas. En estas invocaciones remotas a través de la red se pueden producir fallos o demoras en los tiempos de respuesta, hasta llegar a fallar por limite de tiempo (timeout). Teniendo en cuenta condiciones como la anteriormente mencionada, podemos estar ocupando muchos recursos de nuestros sistemas, solamente en la tarea de propagar estos errores o esperar estos tiempos de respuestas hasta que un contador dispare un limite de tiempo congestionando de esa manera nuestra red. Para tener herramientas que nos ayuden en estas situaciones y pensando en sistemas que sean resilientes y robustos, sugerimos utilizar el patrón de Circuit Breaker (corta circuito).

Circuit Breaker

Básicamente lo que plantea este patrón es hacer un wrapper (envolver) la llamada remota en un objeto de corta circuito, que vaya registrando las fallas. Cuando esas fallas lleguen a un limite dispuesto en el objeto, el circuito se abre y ante llamadas posteriores responde con un error sin hacer la invocación remota.

circuit breaker (básico)

Una implementación básica de circuit breaker asume que una vez que se abre el circuito un externo pueda resetear los contadores para que el circuito se cierre y este dispuesto para actuar nuevamente. Este componente externo puede pensarse dentro del mismo si fuera necesario agregando una lógica para que dado cierto tiempo después de abierto el circuito intente realizar algunas llamadas de manera remota para ver si el sistema está operativo nuevamente y con esto resetear los contadores cerrando el circuito. Este estado intermedio se conoce como Half Open (medio abierto).

Agregando lógica para resetear el circuito

Implementación en node-ts

Como caso práctico dejamos un repositorio con un ejemplo de implementación en node-ts que está disponible en internet (link en las fuentes) y me pareció muy didáctico para entenderlo. El componente CircuitBreaker (circuit-breaker.ts) es una máquina de estados con tres estados: CLOSED, OPEN, HALF OPEN. Ésta es una prueba de cómo realizar una implementación de este patrón pero puede llevarse a ejemplo reales con las modificaciones que se necesiten en cada caso.

Pueden instalar las dependencias y ejecutarlo con ts-node src/index.ts

--

--