Files d'attente de tâches distribuées (ex. Celery) vs scripts crontab

92

J'ai du mal à comprendre le but des «files d'attente de tâches distribuées». Par exemple, la bibliothèque de céleri de python .

Je sais que dans celery, le framework python, vous pouvez définir des fenêtres chronométrées pour que les fonctions soient exécutées. Cependant, cela peut également être facilement fait dans une crontab Linux dirigée vers un script python.

Et pour autant que je sache, et d'après mes propres webapps django-céleri, le céleri consomme beaucoup plus de mémoire RAM que la simple configuration d'un crontab brut. Quelques centaines de Mo de différence pour une application relativement petite.

Quelqu'un peut-il m'aider s'il vous plaît avec cette distinction? Peut-être qu'une explication de haut niveau du fonctionnement des files d'attente / crontabs de tâches en général serait également intéressante.

Je vous remercie.

Lucas Ou-Yang
la source

Réponses:

133

Cela dépend de ce que vous voulez que vos tâches fassent, si vous devez les répartir et comment vous voulez les gérer.

Un crontab est capable d'exécuter un script tous les N intervalles. Il s'exécute, puis revient. Essentiellement, vous obtenez une seule exécution à chaque intervalle. Vous pouvez simplement demander à un crontab d'exécuter une commande de gestion de django et d'accéder à tout l'environnement de django, donc céleri ne vous aide pas vraiment.

Ce que le céleri apporte à la table, à l'aide d'une file d'attente de messages, ce sont des tâches distribuées. De nombreux serveurs peuvent rejoindre le pool de travailleurs et chacun reçoit un élément de travail sans craindre une double manipulation. Il est également possible d'exécuter une tâche dès qu'elle est prête. Avec cron, vous êtes limité à un minimum d'une minute.

À titre d'exemple, imaginez que vous venez de lancer une nouvelle application Web et que vous recevez des centaines d'inscriptions qui nécessitent l'envoi d'un e-mail à chaque utilisateur. L'envoi d'un e-mail peut prendre un certain temps (comparativement), vous décidez donc de gérer les e-mails d'activation via des tâches.

Si vous utilisez cron, vous devez vous assurer que chaque minute, cron est capable de traiter tous les e-mails qui doivent être envoyés. Si vous avez plusieurs serveurs, vous devez maintenant vous assurer que vous n'envoyez pas plusieurs e-mails d'activation au même utilisateur - vous avez besoin d'une sorte de synchronisation.

Avec le céleri, vous ajoutez une tâche à la file d'attente. Vous pouvez avoir plusieurs nœuds de calcul par serveur, vous avez donc déjà évolué avant un cronjob. Vous pouvez également avoir plusieurs serveurs vous permettant d'évoluer encore plus. La synchronisation est gérée dans le cadre de la «file d'attente».

Vous pouvez utiliser du céleri comme substitut cron, mais ce n'est pas vraiment son utilisation principale. Il est utilisé pour délimiter les tâches asynchrones sur un cluster distribué.

Et bien sûr, le céleri a une grande liste de fonctionnalités que cron n'a pas.

Josh Smeaton
la source