técnico · resposta com fontes

Novas tentativas com backoff exponencial

Novas tentativas com backoff exponencial são uma estratégia de tratamento de erros em que o intervalo entre tentativas consecutivas de uma operação que falhou aumenta exponencialmente. Em vez de tentar novamente em intervalos fixos, o sistema espera mais após cada falha para dar ao servidor receptor tempo de se recuperar de congestionamentos ou indisponibilidades temporárias.

Funcionamento técnico

O processo começa com um tempo de espera inicial, como um segundo. Se a primeira nova tentativa falhar, o tempo de espera é multiplicado por um fator constante, normalmente dois. A segunda nova tentativa ocorre após dois segundos, a terceira após quatro, a quarta após oito, e assim por diante. Essa progressão geométrica continua até atingir um limite máximo de espera ou um número máximo de tentativas; nesse ponto, a mensagem é marcada como falha permanente.

Importância para remetentes

Esse método evita que o remetente realize, sem querer, um ataque de negação de serviço contra um servidor de e-mail receptor. Se milhares de mensagens falharem ao mesmo tempo e todas tentarem novamente a cada dez segundos, o pico de tráfego resultante pode manter o receptor fora do ar. Ao espaçar as novas tentativas, os remetentes preservam a reputação e aumentam a chance de que um erro SMTP 4xx temporário se resolva antes de a mensagem ser descartada.

Considerações operacionais

Um complemento essencial a essa estratégia é o jitter, que adiciona uma pequena variação aleatória ao intervalo. Sem jitter, várias requisições que falharam ao mesmo tempo tentarão novamente em ondas sincronizadas, criando picos de tráfego. Implementar o jitter garante que as novas tentativas se distribuam de forma uniforme ao longo da janela de tempo, reduzindo ainda mais a pressão sobre a infraestrutura.

Erros comuns de implementação

Os desenvolvedores costumam esquecer de definir um limite máximo de novas tentativas ou um teto para o intervalo. Sem esse limite, o tempo de espera pode chegar a horas ou dias, causando uma latência inaceitável para e-mails transacionais. Outro erro é tratar falhas permanentes 5xx como passíveis de nova tentativa; o backoff exponencial só deve ser aplicado a erros transitórios 4xx, como limite de taxa ou greylisting temporário.

Exemplo concreto

Considere um e-mail transacional enviado por uma API. A tentativa 1 falha com um erro 421 de servidor ocupado. O sistema espera 2 segundos. A tentativa 2 falha; o sistema espera 4 segundos. A tentativa 3 falha; o sistema espera 8 segundos. Quando a tentativa 4 acontece, é provável que o servidor receptor já tenha esvaziado a fila, e o e-mail é aceito. O SendHQ oferece ferramentas gratuitas em https://sendhq.cc/tools para ajudar a gerenciar a eficiência da infraestrutura de e-mail.

Perguntas que as equipes fazem

Qual é a diferença entre backoff fixo e exponencial?

O backoff fixo tenta novamente a cada X segundos, independentemente do número de falhas. O backoff exponencial aumenta o intervalo após cada falha para reduzir a carga sobre o servidor de destino.

Quando parar de tentar novamente?

As novas tentativas devem parar quando uma falha permanente 5xx for retornada, quando o número máximo de tentativas for atingido ou quando o teto máximo de intervalo for alcançado.

O jitter afeta o crescimento exponencial?

Não. O jitter adiciona um deslocamento aleatório ao intervalo exponencial calculado para evitar picos sincronizados de novas tentativas entre várias requisições simultâneas.

Fontes primárias