分散タスクキュー(例:Celery)とcrontabスクリプト


92

「分散タスクキュー」の目的を理解できません。たとえば、pythonのセロリライブラリ

Pythonフレームワークであるセロリでは、関数を実行するための時間指定ウィンドウを設定できることを知っています。ただし、これはpythonスクリプトを対象とするLinux crontabでも簡単に実行できます。

そして、私の知る限り、そして私自身のdjango-celery Webアプリケーションから示したように、セロリは、生のcrontabをセットアップするよりもはるかに多くのRAMメモリを消費します。比較的小さなアプリの場合、数百MBの違いがあります。

誰かがこの区別を手伝ってくれませんか?おそらく、タスクキュー/ crontabが一般的にどのように機能するかについての高レベルの説明もいいでしょう。

ありがとうございました。

回答:


131

それは、タスクの実行内容、配布する必要があるかどうか、およびそれらをどのように管理するかによって異なります。

crontabは、N間隔ごとにスクリプトを実行できます。実行してから戻ります。基本的に、間隔ごとに1回実行されます。crontabにdjango管理コマンドを実行してdjango環境全体にアクセスするように指示するだけでよいので、celeryは実際には役に立ちません。

セロリがメッセージキューを利用してテーブルにもたらすのは、分散タスクです。多くのサーバーはワーカーのプールに参加でき、それぞれが二重処理の心配なしにワークアイテムを受け取ります。準備ができたらすぐにタスクを実行することもできます。cronでは、最低1分間に制限されています。

例として、新しいWebアプリケーションを起動したばかりで、各ユーザーにメールを送信する必要がある数百のサインアップを受け取っているとします。電子メールの送信には時間がかかる場合があるため(比較的)、タスクを介してアクティベーション電子メールを処理することにします。

cronを使用している場合は、毎分cronが送信する必要のあるすべての電子メールを処理できるようにする必要があります。複数のサーバーがある場合は、同じユーザーに複数のアクティベーションメールを送信しないようにする必要があります。何らかの同期が必要です。

セロリでは、タスクをキューに追加します。サーバーごとに複数のワーカーがある可能性があるため、cronジョブよりも先にスケーリングされています。複数のサーバーを使用して、さらに拡張することもできます。同期は「キュー」の一部として処理されます。

あなたはすることができますのcronの置き換えとしてセロリを使用するが、それは本当に、その主な用途はありません。分散クラスター全体で非同期タスクを実行するために使用されます。

そしてもちろん、セロリにはcronにはない機能の大きなリストがあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.