En 2026, enviar email ya no es “fire and forget”. Entre filtros anti-spam y politicas estrictas de reputacion IP, una rafaga de reintentos mal gestionada puede bloquear tu dominio.
El problema no es solo que falle el proveedor (SES, SendGrid, Mailgun), sino como reacciona tu sistema. Si reintentas miles de correos al mismo tiempo, provocas un Thundering Herd y puedes tumbar tu propia infraestructura.
1. Algoritmo: Exponential Backoff con Jitter
El Exponential Backoff incrementa el tiempo de espera en cada reintento. El Jitter agrega variacion aleatoria para evitar que todos los workers reintenten al mismo tiempo.
Formula
$$T_w = \min(\text{Cap}, \text{Base} \times 2^{\text{Attempt}} + \text{random_jitter})$$
- Base: tiempo inicial (ej. 1 segundo).
- Attempt: numero de intento actual.
- Cap: limite maximo de espera (ej. 4 horas).
- Jitter: variacion aleatoria (+/- 10-20%).
2. Arquitectura de colas y resiliencia
No proceses reintentos en el hilo principal. Usa colas para desacoplar trafico web de procesamiento en background.
Componentes clave:
- Main Queue: recibe eventos de salida.
- Retry Queue: almacena mensajes con delay segun backoff.
- Dead Letter Queue (DLQ): mensajes que fallan tras N intentos para inspeccion manual.
3. Clasificacion inteligente de errores
No todos los errores deben reintentarse.
| Tipo de error | Codigo HTTP comun | Accion | Motivo |
|---|---|---|---|
| Transient | 429, 503, Timeout | RETRY | Saturacion o fallo de red temporal |
| Permanent | 400, 404 | FAIL FAST | Payload invalido; reintentar no ayuda |
| Reputation | 403, Bounced | STOP | Reintentar hard-bounce daña reputacion |
4. Implementacion paso a paso
Paso 1: Idempotencia
Antes de llamar al proveedor, valida si ya se envio usando Idempotency-Key (id transaccional o hash de contenido).
Paso 2: Ejecucion con timeout
Haz la request con timeout estricto (5-10 segundos).
Paso 3: Gestion de fallos
Si hay Transient Error:
- Calcula nuevo delay con Backoff + Jitter.
- Incrementa contador de intentos.
- Reencola el mensaje en Retry Queue.
5. Conclusion
Una estrategia incremental de reintentos protege tu infraestructura y mejora deliverability. Al combinar Exponential Backoff, Jitter e Idempotency, tu sistema pasa de fragil a resiliente frente a picos y caidas de terceros.
Happy reading! ☕
Comments