Pular para o conteúdo

apps/patterns/circuit-breaker

005 · Padrões Fundamentais · ≈ 5 min de estudo

Circuit Breaker

Evita cascata de falhas: depois de N falhas de infraestrutura seguidas o circuito abre e rejeita as chamadas na hora, sem tocar a dependência; passado o tempo de espera, uma sonda testa a recuperação. Use em toda chamada a um serviço externo que pode ficar lento ou fora do ar.

passos
6
arquivos
5
teste
1
tecnologias
4
Lógica puraTypeScriptBunElysiaStryker
Baixar cartão

Cenário

Um app de pagamentos envia PIX a um gateway que é um processo Elysia separado. O gateway recusa um PIX acima do saldo (422, recusa de negócio que não abre o circuito), cai (503 duas vezes) e trava (resposta em 2 s, cortada pelo timeout de 500 ms). Na terceira falha o circuito abre e o PIX seguinte falha na hora, sem chegar ao gateway. O gateway volta e, depois do tempo de espera, a sonda fecha o circuito.

Planta

Estados
5/5
CLOSEDOPENHALF_OPENfast-fail: rejeita sem chamar o gateway422 de saldo insuficiente não conta3 falhas deinfraestrutura seguidas(503 ou timeout)após openTimeout de 1 ssonda ao gateway oksonda falha
5

5 passos — reproduza para seguir o fluxo

  • chamada
  • resposta ou assíncrono
  • falha
  • passo
  • toque num nó para focar
  • repouso ou sucesso
  • transição
  • falha ou recusa
  • Outras plantas de estados

Como funciona

6 passos

Abre o circuito e corta a cascata.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    CLOSEDA chamada vai ao gateway por fetch() com timeout de 500 ms; 5xx e timeout contam como falha

  2. 02

    Recusa de negócio4xx (saldo insuficiente) é resposta de um gateway saudável — zera a sequência em vez de contar

  3. 03

    OPENNa 3ª falha seguida o circuito abre e rejeita com ErrorCircuitOpen, sem chamar o gateway

  4. 04

    HALF_OPENApós openTimeoutMs, uma única sonda passa; outras chamadas simultâneas continuam em fast-fail

  5. 05

    Sonda ok ou falhaSucesso fecha e zera a sequência; falha reabre e reinicia a espera

  6. 06

    TransiçõesCada mudança de estado chega ao onStateChange, que o demo registra no log

apps/patterns/circuit-breaker

5 arquivos

src/

  • circuit_breaker.tsOs 3 estados, timeout interno, classificação de falha e sonda única
  • circuit_breaker.test.tstesteFronteira do limiar, do tempo de espera e das sondas; relógio injetado
  • api_gateway.tsGateway de pagamento (porta 4101) com modos up, down e slow
  • demo.tsdemoSobe o gateway e percorre CLOSED → OPEN → HALF_OPEN → CLOSED

./

  • stryker.config.jsoninfraMutação sobre src/circuit_breaker.ts

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário

Testes: bun run test; mutação: bun run test:mutation.

Requisitos
Bun
Esc

↑ ↓ navegarEnter abrir191 resultados