2016-05-10 3 views
5

セロリの作業者が複数のキュー(または多分多くのキュー)を引き出しているときに、たとえば、私のシステムが1から2ではなく10から15の待ち行列になるように設計されていれば、大きなパフォーマンス上のペナルティがありますか?フォローアップとして、これらのキューの一部が空の場合はどうなりますか?セロリでは、多くのキューを使用することによるパフォーマンス上の重要な影響があります

+0

私は経験から分かっていませんが、心配することはありません。 –

答えて

3

キュー制限に関するご質問への短い答えは:

は、複数のキューが悪化したりほうがよいのではないだろう持っ心配しないでください、ブローカーは、それらの膨大な数を処理するように設計されています。もちろん、多くのユースケースでは、本当に高度なものを除いて、それほど多くは必要ありません。空のキューは問題を発生させず、ブローカ上のメモリをわずかしか使用しません。

交換やバインディングのような他のものがあることを忘れないでください。実際の制限はありませんが、より良いです。understand TOPICの交換は、 CPUを直接的なものよりも)

より完全な答えを得るために、より一般的な観点からパフォーマンスのトピックを見てみましょう。

  1. 労働者数と並行性因子:

    セロリのようなメッセージパッシングに基づく分散システムを見性能の観点から分析するための2つの主要トピックがあります。

    セロリの各ワーカーは同時に実行できるタスクの数を設定する並行性パラメータを持っていますが、これはサーバーの容量(CPU、RAM、I/O)およびオフもちろん、特定のコンシューマが実行するタスクのタイプにも基づいています(消費するキューによって異なります)。

    もちろん、特定の時間枠内で実行する必要のあるタスクの総数によっては、実行する必要があるワーカー/サーバーの数を決定する必要があります。

  2. ブローカ、このアーキテクチャスタイルの単一障害点。

    ブローカー、特にRabbitMQは何百万ものメッセージを問題なく管理するように設計されていますが、より多くのメモリーを使用する必要があります。

    このマシンも調整して、できるだけhigh availabilityにする必要があります。

    もちろん、避けるべき主なものは、生成されるメッセージよりも低いレートでメッセージが消費されることです。キューが成長し続け、RabbitMQが爆発します。ここでsome hintsを見つけることができます。

特定の時間枠で実行されるタスクの数を増やす必要がある場合がありますが、要求のピークに応じてのみ実行する場合があります。このアーキテクチャーの素晴らしい点は、キューのサイズを監視できることです。理解が深くなると、すでに設定されているセロリワーカーで新しいマシンを即座に作成し、必要がない場合はオフにすることができます。これは非常にコストを節約し、効率的なアプローチです。

1つのヒントとして、セロリタスクの結果をRabbitMQに保存しないように注意してください。

+0

コメントありがとう - 非常に便利です。おそらく私は誤解しているかもしれませんが、これらの注釈はブローカー(RabbitMQや、私の場合はRedisなど)のパフォーマンスへの影響に焦点を当てています。私の質問は、主に私のPythonアプリケーションコード、より直接的にはCeleryフレームワークのパフォーマンスに関する心配があったと思います。たとえば、カップルではなくキューを複数使用している場合、Celeryは作業を遅らせるでしょうか? – FMc

+0

こんにちは、それはセロリの視点からは基本的に0の影響があるからです。実際、メッセージの受け渡しに基づいているフレームワークは、複数のキューが正常に処理されていることをうまく処理できないというフレームワークを想像することはほとんどありません。 –

関連する問題