30 de Setembro de 2025
Cenários de Falha e Recuperação
Como pensar um sistema real quando alguma parte quebra, sem tratar resiliência como slogan.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
Trilha
Trilha de system design para entrevistas
Etapa 15 / 19
O problema
Muita arquitetura fala de disponibilidade como se o sistema fosse elegante demais para falhar.
Quando a dependência cai de verdade, a reação vira improviso:
- retry infinito
- timeout gigante
- restart e esperança
Isso não é resiliência.
É desespero com nome técnico.
Modelo mental
Falha faz parte do sistema.
Pensar em recuperação direito é responder quatro perguntas:
- o que quebrou
- quem depende disso
- o que pode degradar e o que precisa parar
- como o sistema volta para um estado coerente
Se você responde isso cedo, o desenho deixa de parecer slogan e começa a parecer operação real.
Quebrando o problema
Nomeie a falha de forma concreta
“O sistema caiu” quase nunca ajuda.
Ajuda mais dizer algo como:
- o banco ficou indisponível
- o gateway de pagamento está lento
- o broker está atrasando entrega
- o storage não aceita escrita
Quando a falha fica concreta, o resto da análise melhora.
Separe o que para do que degrada
Nem toda falha precisa virar erro total.
Às vezes existe modo degradado aceitável.
Mas isso precisa ser explícito.
Exemplos:
- leitura continua, escrita para
- pedido entra como pendente
- relatório demora mais, mas não some
Trate retry como ferramenta perigosa
Retry ajuda em falha transitória.
Mas retry sem limite pode:
- aumentar fila
- saturar dependência já ruim
- duplicar efeito colateral
Por isso, retry bom costuma vir com:
- limite
- backoff
- idempotência
- fila ou quarentena quando necessário
Também precisa de critério para parar.
Se o sistema não sabe quando desistir, ele só transforma uma falha localizada em incidente espalhado.
Recuperar é voltar para estado confiável
Esse ponto separa muita resposta superficial de resposta madura.
Recuperar não é só voltar a responder.
É voltar sem deixar:
- pagamento duplicado
- pedido órfão
- status mentiroso
- reprocessamento confuso
Exemplo simples
Imagine uma API de pedidos que depende de um gateway de pagamento.
Se o gateway cair, você pode escolher:
- bloquear novas compras
- aceitar pedido e marcar pagamento como
PENDING - aceitar com limite e reprocessar tentativa depois
Cada escolha tem custo.
Bloquear tudo protege consistência, mas derruba conversão.
Aceitar pedido pendente preserva fluxo, mas cria passivo operacional e expectativa no usuário.
Uma resposta madura poderia soar assim:
Se o gateway falhar, eu não vou fingir normalidade. Posso aceitar o pedido em estado pendente, com tempo limite claro, e reprocessar tentativa de pagamento em fila. Também preciso impedir retry sem limite e ter reconciliação para limpar pendências antigas.
Agora a resposta não fala só de falha.
Fala de:
- comportamento durante a falha
- experiência do usuário
- volta para consistência
- custo da decisão durante a recuperação
Erros comuns
- Falar de retry sem limite.
- Chamar qualquer fallback de resiliência.
- Ignorar o estado do usuário durante a falha.
- Recuperar disponibilidade e esquecer consistência.
- Tratar falha como detalhe operacional separado do produto.
Como um senior pensa
Quem tem mais experiência costuma trocar a pergunta “como evitar falha?” por outra mais útil:
Quando isso quebrar, o que eu quero que o sistema faça de forma explícita?
Essa pergunta é forte porque obriga você a definir:
- modo degradado
- visibilidade para o usuário
- limite de tentativa
- limpeza de estado
O que o entrevistador quer ver
Em entrevista, falha e recuperação servem para medir maturidade operacional.
O entrevistador quer ver se você:
- trata falha como parte do fluxo
- define degradação aceitável
- pensa em retry com limite
- cuida da volta para estado consistente
Arquitetura madura não promete que nada quebra. Ela decide antes o que fazer quando quebrar.
Recuperação de verdade não é restart. É retorno controlado para um estado em que o sistema volta a merecer confiança.
Resumo rápido
O que vale manter na cabeça
- Falha faz parte do sistema. A arquitetura precisa decidir antes o que para e o que degrada.
- Retry sem limite não é resiliência. É jeito rápido de piorar um sistema já ruim.
- Recuperar não é só voltar a responder. É voltar sem corromper estado.
- Em entrevista, resposta forte fala de comportamento durante a falha e depois da falha.
Checklist de pratica
Use isto ao responder
- Consigo nomear qual componente falhou e quais fluxos foram atingidos?
- Sei dizer o que degrada e o que precisa parar?
- Consigo explicar como evitar duplicação, inconsistência ou retry em cascata?
- Sei descrever como o sistema volta para um estado coerente?
Você concluiu este artigo
Parte da trilha: Trilha de system design para entrevistas (15/19)
Próximo passo
Design de Feed de Redes Sociais Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.