Trabajos en segundo plano y workers
Explora cómo los trabajos en segundo plano y los workers manejan tareas de backend asíncronas, de larga duración y no bloqueantes.
Por qué existen los trabajos en segundo plano
Algunas tareas tardan demasiado en ejecutarse durante una solicitud, por lo que deben trasladarse fuera del ciclo de vida de la solicitud para mantener los sistemas rápidos y receptivos.
- Las tareas de larga duración pueden retrasar significativamente las respuestas a los usuarios.
- Ejemplos comunes incluyen enviar correos electrónicos, generar informes y procesar archivos multimedia.
- Los trabajos en segundo plano permiten que estas tareas se ejecuten por separado de las solicitudes dirigidas al usuario.
Detalles
En un sistema backend típico, se espera que una solicitud se complete rápidamente. Por lo general, los usuarios esperan respuestas en milisegundos o, como mucho, en unos pocos segundos. Sin embargo, algunas operaciones tardan mucho más, como procesar videos subidos, generar informes grandes o enviar notificaciones a muchos usuarios.
Si estas tareas se ejecutan directamente dentro del ciclo de vida de la solicitud, el servidor debe esperar a que terminen antes de responder. Esto provoca tiempos de respuesta lentos e incluso puede causar timeouts, especialmente bajo condiciones de alto tráfico.
Esto crea una mala experiencia de usuario y también reduce la eficiencia del sistema, ya que los recursos quedan ocupados manejando operaciones de larga duración en lugar de atender nuevas solicitudes.
Para resolver esto, los sistemas backend trasladan estas tareas al segundo plano. El servidor responde rápidamente al cliente, mientras que la tarea de larga duración continúa de forma asíncrona fuera del ciclo de vida de la solicitud.
Esta separación es un patrón de diseño fundamental en los sistemas backend modernos, ya que permite respuestas rápidas y, al mismo tiempo, maneja de forma fiable operaciones complejas y que consumen mucho tiempo.
Procesos de trabajadores
Los procesos de trabajadores son programas dedicados que ejecutan trabajos en segundo plano fuera del servidor web principal.
- Los workers se ejecutan por separado del servidor web y se enfocan solo en procesar trabajos.
- Consumen tareas continuamente desde una cola.
- Agregar más workers aumenta el throughput del sistema y la capacidad de procesamiento en paralelo.
Detalles
Los procesos de trabajadores son responsables de ejecutar tareas almacenadas en una cola. A diferencia del servidor web, que maneja las solicitudes entrantes, los workers operan de forma independiente y están optimizados para la ejecución de trabajos en segundo plano.
Cada worker escucha continuamente la cola de tareas y toma trabajos cuando están disponibles. Una vez que se recupera una tarea, el worker la procesa y luego pasa al siguiente trabajo.
Debido a que los workers se ejecutan como procesos separados, pueden escalar de forma independiente de la aplicación principal. Esto permite que los sistemas manejen cargas de trabajo crecientes sin ralentizar el manejo de solicitudes.
Agregar más workers aumenta el throughput al permitir que varios trabajos se procesen en paralelo, lo cual es fundamental para manejar grandes volúmenes de tareas en segundo plano de manera eficiente.
Brokers de mensajes y sistemas de colas
Los brokers de mensajes proporcionan la infraestructura que almacena, distribuye y entrega de forma confiable los trabajos en segundo plano a los workers.
- Los brokers de mensajes actúan como el sistema subyacente para las colas de tareas.
- Las tecnologías comunes incluyen Kafka, RabbitMQ y AWS SQS.
- Garantizan que las tareas se almacenen, entreguen y procesen de forma confiable.
Detalles
Un broker de mensajes es un sistema que se sitúa entre la aplicación y los procesos worker, gestionando el flujo de tareas. Cuando la aplicación crea un trabajo, lo envía al broker en lugar de enviarlo directamente a un worker.
El broker almacena el trabajo de forma duradera, asegurando que no se pierda incluso si partes del sistema fallan. Esto es fundamental para la confiabilidad, especialmente en sistemas distribuidos donde pueden ocurrir fallos en cualquier punto.
Luego, los workers se conectan al broker y extraen tareas cuando están listos para procesarlas. Esto desacopla la aplicación de la capa de ejecución, permitiendo que ambas partes escalen de forma independiente.
Los brokers de mensajes también admiten el procesamiento distribuido, permitiendo que múltiples workers en diferentes máquinas manejen tareas de forma concurrente mientras mantienen garantías de entrega confiables.
Trabajos diferidos
Los trabajos diferidos permiten programar tareas para que se ejecuten en un momento posterior en lugar de ejecutarse de inmediato.
- Las tareas se pueden programar para ejecutarse después de un retraso específico.
- Los casos de uso comunes incluyen recordatorios y reintentar trabajos fallidos.
- Esto permite la automatización basada en el tiempo en sistemas backend.
Detalles
No todas las tareas necesitan ejecutarse de inmediato. En muchos casos, es necesario programar trabajos para que ocurran más tarde, como enviar un correo de recordatorio después de 24 horas o reintentar una operación fallida tras un breve retraso.
Los trabajos diferidos permiten a los sistemas definir cuándo debe ejecutarse una tarea en lugar de procesarla de inmediato. La tarea se almacena con un retraso o una hora programada, y el sistema se asegura de ejecutarla cuando se alcanza ese momento.
Esto normalmente se implementa usando brokers de mensajes o sistemas de programación que hacen seguimiento de cuándo los trabajos deben estar disponibles para los workers. Hasta que expire el retraso, la tarea permanece inactiva y no es tomada por los workers.
Una vez que llega la hora programada, el trabajo se mueve a la cola activa y se procesa como cualquier otra tarea. Este mecanismo es esencial para construir sistemas de reintento confiables y flujos de trabajo basados en el tiempo.
La ejecución diferida es una característica clave en los sistemas backend modernos, ya que permite la automatización y mejora la tolerancia a fallos sin requerir intervención manual.
Trabajos cron
Los trabajos cron ejecutan tareas automáticamente según un horario fijo, lo que permite operaciones recurrentes sin intervención manual.
- Los trabajos cron ejecutan tareas en intervalos de tiempo predefinidos.
- Los casos de uso comunes incluyen mantenimiento, informes y facturación.
- Se activan mediante un programador en lugar de solicitudes de usuario.
Detalles
Los trabajos cron se usan para ejecutar tareas repetidamente en momentos o intervalos específicos, como cada noche, cada día o cada semana. A diferencia de los trabajos en segundo plano activados por acciones del usuario, los trabajos cron son iniciados por un programador.
Un programador, a menudo llamado cron, lleva el control de reglas basadas en el tiempo y activa tareas cuando se cumplen esas condiciones. Por ejemplo, un sistema podría ejecutar una tarea de limpieza de base de datos cada noche a medianoche o generar informes de analítica cada mañana.
Una vez activada, la tarea programada normalmente se envía a un proceso worker o se ejecuta como un trabajo en segundo plano. Esto permite que el sistema gestione cargas de trabajo recurrentes sin afectar el procesamiento de solicitudes en tiempo real.
Los trabajos cron son esenciales para automatizar operaciones rutinarias, garantizando que las tareas de mantenimiento y periódicas se realicen de forma consistente sin esfuerzo manual.
Manejo de fallos en trabajos en segundo plano
Los trabajos en segundo plano pueden fallar, por lo que los sistemas deben implementar estrategias de reintento para garantizar que las tareas se completen eventualmente.
- Los fallos son esperables en sistemas distribuidos y deben manejarse explícitamente.
- Las colas de reintento permiten volver a intentar las tareas después de un fallo.
- Las colas de mensajes muertos capturan las tareas que fallan repetidamente.
Detalles
Las tareas en segundo plano a menudo dependen de sistemas externos como bases de datos, APIs o servicios de red, que pueden fallar de forma impredecible. Por eso, el manejo de fallos es una parte crítica de cualquier sistema de trabajos en segundo plano.
Un enfoque común es reintentar las tareas fallidas. Cuando un trabajo falla, se vuelve a colocar en una cola de reintento y se intenta de nuevo después de cierto retraso. Esto aumenta la probabilidad de éxito si el fallo fue temporal.
Para evitar sobrecargar el sistema, los reintentos suelen espaciarse usando backoff exponencial, donde cada reintento espera más que el anterior. Esto evita que fallos repetidos y rápidos generen carga adicional.
Si una tarea falla demasiadas veces, se mueve a una cola de mensajes muertos. Esto permite a los ingenieros inspeccionar y depurar trabajos problemáticos sin bloquear el resto del sistema.
Estos patrones garantizan que el procesamiento en segundo plano sea confiable, incluso en presencia de fallos, lo cual es esencial para construir sistemas backend robustos.
Sección de preguntas
1 / 5
Esta lección forma parte del contenido premium
Pásate al plan premium para eliminar el desenfoque y desbloquear la lectura completa.