web-dev-qa-db-fra.com

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

J'ai du mal à comprendre l'objectif des "files d'attente de tâches distribuées". Par exemple, python bibliothèque céleri .

Je sais que dans céleri, le framework python, vous pouvez définir des fenêtres temporisées pour que les fonctions soient exécutées. Cependant, cela peut aussi être facilement fait dans un crontab linux dirigé vers un python.

Et pour autant que je sache, et comme le montrent mes propres webapps Django-céleri, le céleri consomme beaucoup plus de mémoire RAM que la simple configuration d'une crontab brute. 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 sur le fonctionnement des files d'attente de tâches/crontabs en général serait également intéressante.

Je vous remercie.

82
Lucas Ou-Yang

Cela dépend de ce que vous voulez que vos tâches fassent, si vous avez besoin de les distribuer et de la façon dont 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 diriger une crontab pour exécuter une commande de gestion Django et accéder à tout l'environnement Django, donc le céleri ne vous y aide pas vraiment).

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

Par 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 du temps (comparativement), vous décidez donc de gérer les e-mails d'activation via des tâches.

Si vous utilisiez 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 travailleurs 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 le céleri comme remplacement cron mais ce n'est pas vraiment son utilisation principale. Il est utilisé pour exploiter des tâches asynchrones sur un cluster distribué.

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

121
Josh Smeaton