Backend, APIs e dados · Avançado

Confiabilidade em chamadas a serviços externos

Em uma linha: Toda chamada de saída vai falhar em algum momento — a única pergunta é se você planejou o que acontece então.

Quatro mecanismos

Timeout. Em toda chamada, sempre. Uma chamada sem limite de tempo retém um recurso até o sistema sufocar.

Retry com atraso crescente. Só para ações seguras de repetir, e só para erros transitórios. Retentar um erro de validação é desperdício.

Circuit breaker. Após uma sequência de falhas, pare de tentar por um tempo. Isso protege você e o serviço que já está sofrendo.

Modo degradado. O que o sistema mostra quando o serviço não está disponível: dados em cache, funcionalidade parcial ou uma mensagem clara.

O problema da duplicação

Quando uma chamada falha por timeout, não se sabe se a ação foi executada. Em toda ação com impacto — um débito, um envio, uma criação — envie uma chave única que permita ao outro lado detectar uma repetição. Sem ela, um retry pode cobrar duas vezes.

O que monitorar

Taxa de erro e tempo de resposta por serviço externo separadamente, e o estado do circuit breaker. Uma queda do fornecedor que aparece no seu lado como 'o sistema está lento' desperdiça horas de investigação desnecessária.

Indo mais fundo

Separe uma dependência crítica de uma secundária, e certifique-se de que uma secundária não pode derrubar um caminho principal. Um serviço de analytics ou enriquecimento no caminho síncrono é um ponto de falha sem nenhuma justificativa de negócio.