Colas de tareas distribuidas (por ejemplo, apio) frente a scripts crontab

92

Tengo problemas para comprender el propósito de las 'colas de tareas distribuidas'. Por ejemplo, la biblioteca de apio de Python .

Sé que en apio, el marco de Python, puede configurar ventanas temporizadas para que las funciones se ejecuten. Sin embargo, eso también se puede hacer fácilmente en un crontab de Linux dirigido a un script de Python.

Y hasta donde yo sé, y como se muestra en mis propias aplicaciones web django-celery, el apio consume mucha más memoria RAM que simplemente configurar un crontab sin procesar. Pocos cientos de MB de diferencia para una aplicación relativamente pequeña.

¿Alguien puede ayudarme con esta distinción? Quizás también sería bueno una explicación de alto nivel de cómo funcionan las colas de tareas / crontabs en general.

Gracias.

Lucas Ou-Yang
fuente

Respuestas:

133

Depende de lo que quiera que hagan sus tareas, si necesita distribuirlas y cómo quiere gestionarlas.

Un crontab es capaz de ejecutar un script cada N intervalos. Corre y luego regresa. Básicamente, obtienes una única ejecución en cada intervalo. Podría simplemente dirigir un crontab para ejecutar un comando de administración de django y obtener acceso a todo el entorno de django, por lo que el apio realmente no lo ayuda allí.

Lo que aporta el apio a la mesa, con la ayuda de una cola de mensajes, son tareas distribuidas. Muchos servidores pueden unirse al grupo de trabajadores y cada uno recibe un elemento de trabajo sin temor a una doble manipulación. También es posible ejecutar una tarea tan pronto como esté lista. Con cron, está limitado a un mínimo de un minuto.

Como ejemplo, imagine que acaba de lanzar una nueva aplicación web y está recibiendo cientos de registros que requieren que se envíe un correo electrónico a cada usuario. Enviar un correo electrónico puede llevar mucho tiempo (comparativamente), por lo que decide que manejará los correos electrónicos de activación a través de tareas.

Si estuviera usando cron, necesitaría asegurarse de que cada minuto cron pueda procesar todos los correos electrónicos que deben enviarse. Si tiene varios servidores, ahora debe asegurarse de no enviar varios correos electrónicos de activación al mismo usuario; necesita algún tipo de sincronización.

Con el apio, agrega una tarea a la cola. Puede tener varios trabajadores por servidor, por lo que ya se ha adelantado a un cronjob. También puede tener varios servidores que le permitan escalar aún más. La sincronización se maneja como parte de la 'cola'.

Usted puede utilizar el apio como un reemplazo del cron, pero eso no es realmente su uso principal. Se utiliza para generar tareas asincrónicas en un clúster distribuido.

Y, por supuesto, el apio tiene una gran lista de características que cron no tiene.

Josh Smeaton
fuente