Colas en producción sin dolor: idempotencia y reintentos
Por qué una tarea puede ejecutarse dos veces
Los workers de las colas reintentan las tareas ante los fallos, lo que significa que cualquier tarea puede ejecutarse de una a varias veces. Si no se contempla esto en el diseño, la ejecución repetida provoca cargos dobles, correos duplicados e inconsistencia de los datos.
La idempotencia como requisito
Una tarea idempotente es segura para volver a ejecutarse: una llamada repetida no cambia el resultado. Lo logramos con claves únicas de operación y comprobaciones de estado antes de ejecutar los efectos secundarios.
Técnicas prácticas
- Una clave de idempotencia única para cada operación externa.
- Comprobación del estado actual de un registro antes de cambiar el estado.
- Restricciones únicas a nivel de base de datos como última línea de defensa.
Reintentos y backoff
Limitamos el número de intentos y usamos un retroceso exponencial con jitter para no rematar un servicio externo caído con una avalancha de reintentos. Los errores terminales se envían a una tabla de tareas fallidas para su análisis manual.
Observabilidad
Monitorear las colas mediante un panel y métricas permite notar a tiempo el aumento de los retrasos y la acumulación de tareas. Sin observabilidad, las colas se convierten en una caja negra.
Conclusiones
La idempotencia, unos reintentos sensatos y el monitoreo convierten las colas de una fuente de incidentes en un mecanismo fiable de procesamiento en segundo plano al que se le pueden confiar las operaciones monetarias.
Tecnologías
Etiquetas
Ruslan Ismailov
Desarrollador Senior Web / Backend. Desarrollador senior web/backend con 9 años de experiencia. Stack: PHP, Laravel, PostgreSQL, Redis, Docker, Kubernetes, REST, microservicios, CI/CD. Más sobre mí →