2012-01-31 13 views
32

私の理解から、Celeryは分散タスクキューです。つまり、タスク/ジョブを他のサーバーにディスパッチして結果を返すことだけです。 RabbitMQはメッセージキューです。しかし、作業者は、メッセージを受信したときにMQを聴いてタスクを実行することができます。これはセロリが提供するものを正確に実現するので、なぜセロリが必要なのでしょうか?なぜRabbitMQの代わりにCeleryを使用するのですか?

答えて

31

あなたはそうです、セロリをまったく必要としません。分散システムを設計する際には多くのオプションがあり、すべての状況に適した方法を実行する正しい方法はありません。

多くの人が、メッセージコンシューマのプールがキューに表示されるのを待っていること、仕事をしていること、仕事が終了したときにメッセージを送信する方が柔軟性があることを発見しました。

セロリーはパッケージ内にたくさんのものをまとめているフレームワークですが、パッケージ全体が本当に必要ない場合は、RabbitMQを設定して、必要なものだけをすべて実装することをお勧めします。さらに、RabbitMQは、Celeryが実装するタスクキューのシナリオ以外にも、より多くのシナリオで使用できます。

しかし、セロリを選んだ場合は、RabbitMQについて2回考えてください。 Celeryのメッセージキューイングモデルはシンプルであり、RabbitMQよりもRedisのようなものに適しています。ウサギにはセロリが基本的に無視する豊富なオプションがあります。

+2

"ウサギにはセロリが基本的に無視する豊富なオプションがあります"。それは本当ですが、少し誤解を招くことです。例えば、ウサギの層でセロリによって制御されないルーティングルールを設定することはできますが、セロリタスクのルーティングと消費には影響します。これは、発信者、セルリーカスタムルータ、または交換メカニズムによってルーティングが処理されるかどうかにかかわらず、設計上の問題です。うさぎの設定がセロリにとって「不可視」になることは事実ですが、それが有用な効果を持たないというわけではありません。 –

21

セロリは、基本的にはあなたが言ったことをするための素晴らしいインターフェイスを提供し、あなたのためのすべての設定を扱います。はい、手で行うことはできますが、セロリを書き直すだけです。

+5

操作要素もあります。セロリの巨大な部分には、信頼性(特定の例外がシリアライズされたときなどにクラッシュしないなど)、およびワーカーやクラスタの管理などがあります。 – asksol

関連する問題