técnico · respuesta con fuentes

Reintentos con backoff exponencial

Los reintentos con backoff exponencial son una estrategia de gestión de errores en la que el retraso entre reintentos consecutivos de una operación fallida aumenta de forma exponencial. En lugar de reintentar a intervalos fijos, el sistema espera más tras cada fallo para dar tiempo al servidor receptor a recuperarse de la congestión o de interrupciones temporales.

Funcionamiento técnico

El proceso empieza con un tiempo de espera inicial, por ejemplo, un segundo. Si el primer reintento falla, el tiempo de espera se multiplica por un factor constante, normalmente dos. El segundo reintento se produce a los dos segundos, el tercero a los cuatro, el cuarto a los ocho, y así sucesivamente. Esta progresión geométrica continúa hasta alcanzar un umbral de retraso máximo o un número máximo de intentos, momento en el que el mensaje se marca como fallo permanente.

Por qué importa a los remitentes

Este método evita que un remitente provoque sin querer un ataque de denegación de servicio contra un servidor de correo receptor. Si miles de mensajes fallan a la vez y todos se reintentan cada diez segundos, el pico de tráfico resultante puede mantener al receptor fuera de servicio. Al espaciar los reintentos, los remitentes mantienen una mejor reputación y aumentan la probabilidad de que un error SMTP 4xx temporal se resuelva antes de que el mensaje se descarte.

Consideraciones operativas

Un complemento fundamental de esta estrategia es el jitter, que agrega una pequeña cantidad de ruido aleatorio al retraso. Sin jitter, varias solicitudes que fallaron al mismo tiempo se reintentarán en oleadas sincronizadas y generarán picos de tráfico. Implementar jitter garantiza que los reintentos se distribuyan de forma uniforme en la ventana de tiempo, lo que reduce todavía más la presión sobre la infraestructura.

Errores de implementación comunes

Los desarrolladores suelen olvidar fijar un límite máximo de reintentos o un tope para el retraso. Sin tope, el tiempo de espera puede crecer hasta horas o días y causar una latencia inaceptable en los correos transaccionales. Otro error es tratar los fallos permanentes 5xx como reintentables: el backoff exponencial solo debe aplicarse a los errores transitorios 4xx, como los límites de frecuencia o el greylisting temporal.

Ejemplo concreto

Considere un correo transaccional enviado mediante una API. El intento 1 falla por un error 421 de servidor ocupado. El sistema espera 2 segundos. El intento 2 falla; el sistema espera 4 segundos. El intento 3 falla; el sistema espera 8 segundos. Cuando se produce el intento 4, lo más probable es que el servidor receptor ya haya vaciado su cola y acepte el correo. SendHQ ofrece herramientas gratuitas en https://sendhq.cc/tools para ayudarle a gestionar la eficiencia de su infraestructura de correo.

Preguntas habituales de los equipos

¿Qué diferencia hay entre el backoff fijo y el exponencial?

El backoff fijo reintenta cada X segundos, independientemente del número de fallos. El backoff exponencial aumenta el intervalo tras cada fallo para reducir la carga sobre el servidor de destino.

¿Cuándo se debe dejar de reintentar?

Los reintentos deben detenerse cuando se devuelve un fallo permanente 5xx, cuando se alcanza el número máximo de intentos o cuando se llega al tope de retraso máximo.

¿El jitter afecta al crecimiento exponencial?

No, el jitter agrega un desfase aleatorio al retraso exponencial calculado para evitar picos de reintentos sincronizados entre varias solicitudes simultáneas.

Fuentes primarias