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

93

Мне трудно понять назначение «распределенных очередей задач». Например, библиотека сельдерея python .

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

Насколько мне известно, сельдерей потребляет гораздо больше оперативной памяти, чем просто настройка необработанного crontab. Это видно из моих собственных веб-приложений django-celery. Разница в несколько сотен МБ для относительно небольшого приложения.

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

Спасибо.

Лукас Оу-Ян
источник

Ответы:

136

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

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

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

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

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

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

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

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

Джош Смитон
источник