01
Por que retry no mesmo provedor não é fallback
Retry e fallback resolvem problemas diferentes e são confundidos com frequência. Retry é insistir na mesma porta: a chamada falhou por um soluço transitório, você espera um pouco e tenta de novo no mesmo provedor. Funciona para erro pontual, um pacote perdido, uma instância que reiniciou. Fallback é trocar de porta: o provedor primário não está respondendo de forma consistente, então você manda a mesma requisição para outro provedor. Quando o primário está em incidente amplo, retry só bate na mesma parede mais vezes, some latência ao pedido e ainda pode piorar, porque cada retry é mais carga sobre um serviço que já está sofrendo. O sinal de que você precisa de fallback e não de mais retry é a falha persistir depois de algumas tentativas: aí o problema não é transitório, é o provedor, e a solução é outro provedor.
O erro clássico é tratar retry e fallback como a mesma coisa e empilhar retries agressivos esperando que a nona tentativa dê certo. Num incidente do provedor, isso transforma uma falha rápida numa espera longa: o cliente fica olhando o "digitando..." por dezenas de segundos até o sistema desistir, quando poderia ter recebido a resposta do provedor secundário em um segundo. A ordem certa é retry curto e limitado no provedor atual para absorver o soluço transitório, e fallback para outro provedor assim que fica claro que não é soluço, é queda. Um sem o outro deixa buraco: só retry não sobrevive à queda do provedor, só fallback troca de rota por qualquer soluço bobo que o retry resolveria mais barato.
| Aspecto | Retry (mesmo provedor) | Fallback (outro provedor) |
|---|---|---|
| Resolve | Soluço transitório, erro pontual | Queda ou degradação persistente do provedor |
| Ação | Espera e repete na mesma porta | Manda a mesma requisição para outra porta |
| Custo do erro | Baixo se limitado, alto se agressivo | Troca de rota, exige normalizar prompt e resposta |
| Risco | Insistir num provedor que já caiu | Derrubar o secundário se ele receber toda a carga |