web-dev-qa-db-ja.com

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

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

セロリでは、pythonフレームワークで、関数の実行時間を設定することができます。ただし、これはpythonスクリプト。

私の知る限り、私のDjango-celery webappsからわかるように、セロリは生のcrontabをセットアップするよりもはるかに多くのRAMメモリを消費します。

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

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

82
Lucas Ou-Yang

それは、タスクに何をしてほしいか、それらを配布する必要があるかどうか、そしてそれらをどのように管理したいかに依存します。

Crontabは、N間隔ごとにスクリプトを実行できます。実行してから戻ります。基本的に、間隔ごとに1回実行されます。 crontabに指示してDjango=管理コマンドを実行し、Django環境全体にアクセスできるので、セロリはあなたを助けません。

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

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

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

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

あなたはcancronの代替品としてセロリを使用できますが、それは実際には主な用途ではありません。分散クラスター全体で非同期タスクを実行するために使用されます。

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

121
Josh Smeaton