Timeouts e retentativas em integrações: evitando falhas em cascata

Integrações falham de maneiras previsíveis: ficam lentas, recusam conexão, respondem parcialmente ou oscilam por alguns minutos. Sem timeout, uma chamada externa pode prender recursos internos até afetar usuários que nem dependem diretamente dela.

Retentativas ajudam, mas também podem piorar a situação. Repetir chamadas sem critério aumenta carga justamente quando o serviço está instável e pode gerar duplicidade se a operação não for idempotente.

Timeout vem primeiro

Defina quanto tempo faz sentido esperar em cada contexto. Uma busca em tela interativa geralmente precisa de limite curto. Um processamento assíncrono pode tolerar mais tempo, desde que não bloqueie o restante do sistema.

Timeouts devem considerar conexão, leitura e operação total. Se apenas um deles é configurado, ainda existe espaço para chamadas penduradas e filas internas crescendo sem visibilidade.

Retente com critério

Use poucas tentativas, espaçadas de forma progressiva, e registre o motivo de cada falha. Se a operação altera estado, envie um identificador idempotente para que o destino reconheça repetição e evite duplicar cobrança, cadastro ou notificação.

Também separe erro temporário de erro definitivo. Credencial inválida, contrato quebrado e dados malformados não melhoram com tentativa adicional. Eles precisam de correção, não de insistência.

Proteção sistêmica

Circuit breakers, filas e alertas completam o desenho quando a integração é crítica. O objetivo é conter dano: falhar rápido, preservar o fluxo principal e dar ao time informação suficiente para agir.

Related posts

Reliability em bancos de dados e filas para sistemas pequenos

Observabilidade para APIs pequenas: o que monitorar

Ambientes de staging úteis: reduzir risco antes de publicar mudanças