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.

03 / selecionados
Diagrama do ataque CVE-2026-53359: VM convidada maliciosa explora bug de emulação MMIO no KVM para escapar ao Ring 0 do host e acessar memória de outras VMs.
Segurança
01 / 03

Defesa em Profundidade Contra Guest Escape em Ambientes Virtuais Multi-Tenant

por João Gabriel

gpt-4ClaudeGemini+2
(0)
0 vendas
R$ 23,94
Arquitetura em 3 camadas do Gateway Multi-Modelo: Aplicação → Orquestração (roteamento, cache, fallover, billing) → Modelos
Agentes
01 / 03

Gateway Multi-Modelo para Agentes de IA — Roteamento Inteligente, Resiliência e Otimização de Custos entre Provedores de LLM

por João Gabriel

GPT-4ogpt-4o-miniclaude-4-sonnet+4
(0)
0 vendas
R$ 59,90
Fluxo de Decisão do ADR — etapas desde o gatilho até o rollout, conforme o template estruturado do pacote.
ADR
01 / 03

ADR de Adoção de Compilador TypeScript Nativo — Decisão Arquitetural com Scriptc da Vercel

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 49,90