Ir para o conteúdo principal
ArchPrompts
Voltar ao blog
Caderno técnico / Nota de campo

Circuit Breaker: como parar uma falha antes que ela vire cascata

Um serviço lento em cascata derruba o sistema inteiro mais rápido que um serviço fora do ar. O circuit breaker existe pra isso: parar de tentar antes que a tentativa vire o problema.

A
ArchPrompts
3 min de leitura
Circuit Breaker: como parar uma falha antes que ela vire cascata
AP / Prancha visual 01
Leitura principal

Um serviço fora do ar é um problema conhecido: o chamador recebe erro, trata, segue a vida. Um serviço lento é pior — cada chamada trava uma thread ou conexão esperando um timeout que nunca chega rápido o bastante, e a fila de requisições represadas cresce até derrubar quem está chamando também. A consequência é direta: a falha deixa de ser local e vira cascata, subindo pela cadeia de serviços até derrubar partes do sistema que não tinham nada a ver com o problema original.

O circuit breaker (disjuntor, no sentido elétrico mesmo — o mesmo dispositivo que desarma antes de queimar a instalação) existe pra cortar essa cascata antes que ela se espalhe.

As três posições do disjuntor

O padrão funciona como uma máquina de estados com três posições:

Diagrama do circuit breaker: estado Fechado permite chamadas e conta falhas; ao ultrapassar o limite, abre e passa a rejeitar chamadas na hora, sem tentar a rede; depois de um tempo de espera, entra em Meio-Aberto e libera uma chamada de teste — sucesso fecha o circuito de novo, falha reabre.
Diagrama do circuit breaker: estado Fechado permite chamadas e conta falhas; ao ultrapassar o limite, abre e passa a rejeitar chamadas na hora, sem tentar a rede; depois de um tempo de espera, entra em Meio-Aberto e libera uma chamada de teste — sucesso fecha o circuito de novo, falha reabre.

  • Fechado — estado normal. As chamadas passam direto pro serviço de destino, e o circuit breaker só conta falhas em segundo plano.
  • Aberto — depois que as falhas ultrapassam um limite definido (ex.: 50% de erro numa janela de 10 segundos), o circuito abre. A partir daí, toda chamada nova falha na hora, sem nem tentar a rede — o chamador recebe erro imediato em vez de esperar um timeout.
  • Meio-Aberto — depois de um tempo de espera configurado, o circuito deixa passar uma chamada de teste. Se ela funcionar, o circuito fecha de novo e o tráfego volta ao normal. Se falhar, reabre e o cronômetro de espera recomeça.

Na prática, isso significa que o serviço com problema ganha um período sem carga pra se recuperar — em vez de continuar recebendo o volume total de chamadas exatamente enquanto está mais fragilizado.

Por que não é só um try/catch com retry

Retry sozinho, sem circuit breaker, piora cascata: cada chamada que falha e tenta de novo multiplica a carga sobre um serviço que já está com dificuldade de responder. É o oposto do efeito desejado — mais tentativa, mais pressão, mais lentidão, ciclo que se retroalimenta.

O circuit breaker resolve isso interrompendo a tentativa completamente durante o estado aberto. Ou seja: retry ajuda a resolver falha transitória pontual; circuit breaker protege o sistema inteiro de uma falha persistente que retry sozinho só pioraria.

Onde isso costuma dar errado

  • Limiar mal calibrado — threshold de erro baixo demais abre o circuito por qualquer soluço passageiro; alto demais deixa a cascata se formar antes de agir
  • Tempo de espera fixo demais — não se adapta a serviços com padrões de recuperação diferentes; um serviço de banco de dados e uma API de terceiro não se recuperam no mesmo ritmo
  • Fallback ausente — abrir o circuito sem ter uma resposta alternativa (cache, valor default, degradação graciosa) só transforma "erro lento" em "erro rápido", sem resolver a experiência de quem está do outro lado

Nenhum desses três é motivo pra não usar o padrão — são motivo pra calibrar com dado real de produção em vez de valor padrão de biblioteca, e pra sempre desenhar o fallback junto com o disjuntor, não depois.

Do conceito à execução

Ferramentas práticas para levar as decisões desta nota ao seu próximo projeto.

07 / selecionados
Da intenção declarada à decisão registrada: o desvio entre o que o time quis e o que o código faz é o achado central.
ADR
01 / 03

Auditor de Intenção Arquitetural: laudo rastreável do código que a IA escreveu

por João Gabriel

gpt-4ClaudeGemini
—(0)
0 vendas
R$ 19,90
Memória por recuperação vs. cérebro documental: o mesmo objetivo — dar contexto ao agente — por dois caminhos opostos.
Agentes
01 / 03

Arquiteto de Contexto do Agente: cérebro documental auditável no lugar da memória por RAG

por João Gabriel

gpt-4ClaudeGemini
—(0)
0 vendas
R$ 19,90
Camadas de controle de um agente LLM conectado: o usuário instrui um orquestrador que, para qualquer efeito colateral, passa por um gateway de política zero-confiança antes de tocar sistemas OAuth/dados sensíveis (e-mail, cloud, repositórios).
Segurança
01 / 03

Agente LLM Conectado e Seguro: ADR, modelo de ameaças e gates de tool-call

por João Gabriel

gpt-4ClaudeGemini
—(0)
0 vendas
R$ 19,90
Fluxo do ataque de supply-chain via npm (incidente Keyv, ago/2026) e a superficie de governanca.
Segurança
01 / 02

ADR de Supply Chain: dependências zero-trust e runbook para pacote comprometido

por João Gabriel

gpt-4ClaudeGemini
—(0)
0 vendas
R$ 19,90
Pipeline de rollout OTA canario por coorte, com gate de metricas, kill switch e reversao A/B
Event-Driven
01 / 03

ADR e Runbook de Rollout OTA Seguro para frotas de dispositivos

por João Gabriel

gpt-4gpt-5Claude+1
—(0)
0 vendas
R$ 19,90
Fluxo da exploração de SSRF em uma tool de fetch de agente de IA: usuário/modelo controlam a URL, o fetcher sem validação alcança o metadata service interno.
Segurança
01 / 03

ADR de Segurança para Fetchers de Agentes de IA: mitigação de SSRF

por João Gabriel

gpt-4ClaudeGemini+1
—(0)
0 vendas
R$ 14,90
Seis fronteiras de confiança (FB-1 a FB-6): onde código e credencial trocam de domínio, do notebook do dev até a nuvem de produção.
Segurança
01 / 03

ArchTrust: revisão de fronteiras de confiança na cadeia de suprimentos

por João Gabriel

gpt-4ClaudeGemini+2
—(0)
0 vendas
R$ 19,90