Распределенные очереди задач (пример Celery) и скрипты crontab

У меня возникли проблемы с пониманием цели "распределенных очередей задач". Например, python библиотека сельдерея.

Я знаю, что в celery, python framework, вы можете установить временные окна для выполнения функций. Однако это также можно легко сделать в linux crontab, направленном на python script.

И насколько я знаю, и показанный на моем собственном веб-сайте django-celery, сельдерей потребляет гораздо больше ОЗУ, чем просто создание необработанного кронтаба. Разница в несколько сотен МБ для относительно небольшого приложения.

Может кто-нибудь, пожалуйста, помогите мне с этим различием? Возможно, было бы неплохо объяснение высокого уровня того, как работают очереди задач /crontabs в целом.

Спасибо.

Ответ 1

Это зависит от того, что вы хотите, чтобы ваши задачи выполнялись, если вам нужно их распространять и как вы хотите управлять ими.

Crontab способен выполнять script каждые N интервалов. Он запускается, а затем возвращается. По сути, вы получаете одно выполнение каждого интервала. Вы можете просто направить crontab для выполнения команды управления django и получить доступ ко всей среде django, поэтому сельдерей на самом деле вам не поможет.

Что сельдерей приносит в таблицу, с помощью очереди сообщений, это распределенные задачи. Многие серверы могут присоединиться к пулу работников, и каждый из них получает рабочий элемент, не опасаясь двойной обработки. Также возможно выполнить задачу, как только она будет готова. С помощью cron вы ограничены как минимум на одну минуту.

В качестве примера представьте, что вы только что запустили новое веб-приложение, и вы получаете сотни подписей, требующих отправки электронного письма каждому пользователю. Отправка электронной почты может занять много времени (сравнительно), поэтому вы решите, что будете обрабатывать электронные письма с помощью задач.

Если вы использовали cron, вам нужно убедиться, что каждую минуту cron сможет обрабатывать все электронные письма, которые необходимо отправить. Если у вас несколько серверов, вам теперь нужно убедиться, что вы не отправляете несколько писем с активацией одному пользователю - вам нужна какая-то синхронизация.

С сельдереем вы добавляете задачу в очередь. У вас может быть несколько рабочих на сервер, поэтому вы уже масштабировались впереди cronjob. У вас также может быть несколько серверов, позволяющих масштабировать еще больше. Синхронизация обрабатывается как часть "очереди".

Вы можете использовать сельдерей в качестве замены cron, но это не главное его использование. Он используется для обработки асинхронных задач в распределенном кластере.

И, конечно же, сельдерей имеет большой список функций, который cron не делает.