Черги розподілених завдань (наприклад, Селера) проти скриптів crontab


92

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

Я знаю, що у селері, фреймворку python, ви можете встановити часові вікна для виконання функцій. Однак це також можна легко зробити в linux crontab, спрямованому на скрипт python.

І, наскільки мені відомо, і показано з власних веб-додатків django-celery, селера споживає набагато більше оперативної пам’яті, ніж просто налаштування вихідного crontab. Різниця в кілька сотень МБ для порівняно невеликого додатка.

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

Дякую.

Відповіді:


133

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

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

Те, що селера приносить за стіл за допомогою черги повідомлень, - це розподілені завдання. Багато серверів можуть приєднатися до пулу працівників, і кожен отримує робочий предмет, не боячись подвійного обробки. Також можна виконати завдання, як тільки воно буде готове. З cron ви обмежуєтеся мінімум однією хвилиною.

Наприклад, уявіть, що ви щойно запустили нову веб-програму і отримуєте сотні реєстрацій, що вимагають надсилання електронного листа кожному користувачеві. Надсилання електронного листа може зайняти багато часу (порівняно), тому ви вирішите, що оброблятимете електронні листи з активацією за допомогою завдань.

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

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

Ви можете використовувати селеру як заміну крону, але насправді це не основне його використання. Він використовується для розробки асинхронних завдань у розподіленому кластері.

І звичайно, селера має великий перелік функцій, яких крон немає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.