1

現在、Rabbit の効率を改善する方法に取り組んでいます。


例えば:

コンポーネント:

  • TCP ロード バランサ
  • 生産者
  • RabbitMQ クラスター
  • 消費者

プロデューサー:

2 ~ 5 台の EC2 サーバー。各サーバーには がlogstashインストールされ、Rabbit にメッセージを送信するように構成されています。これについて特別なことは何もありません。要件は 1 つだけです。メッセージは永続的である必要があります。(I/O が問題にならない場合に備えて)

RabbitMQ クラスター:

2 台の EC2 サーバー。大量のメモリ、CPU、優れたディスク、優れた帯域幅。

消費者:

消費者の数は、2 ~ 15 人で大きく異なります。コンシューマーはロード バランサー (ELB) に接続します。それらのいくつかは、それらのbasic.getいくつかを使用していますbasic.consume。要件:no_ack = Falseは、すべてのメッセージを確認する必要があることを意味します。


現在、トラフィックの 95% を保持する 1 つのキューがあります。私の質問は次のとおりです。

  • ウサギ クラスタの各ノードに同じ数のキューを作成した場合 (現在、この 1 つの高トラフィック キューの負荷を分散する方法について話している)、各プロデューサーはメッセージを独自のキューに発行します。反対側のコンシューマーは、すべてのキューにサブスクライブし、すべてのキューからメッセージを取得します。パフォーマンスが向上しますか?
  • また、エクスチェンジとキューの 1 対 1 の関係によって、パフォーマンスに違いは生じますか?
  • 最後に、この場合は何をお勧めしますか? (コンシューマーを動的に構成することはできません)
4

1 に答える 1

1

まず、キューをミラーリングして持続メッセージを使用すると、パフォーマンスが低下します。詳細については、RabbitMQ HAのパフォーマンスに関する私の記事を参照してください。

スループットを向上させるために、より多くのキューを検討するのは正しいことです。各 RabbitMQ は単一の Erlang プロセスであるため、1 つのコアしか使用しません。もちろん、他にも役立つ Erlang プロセスはありますが、実際には単一のキューがボトルネックになっています。答えは、接続された各キューにメッセージを均等に分散する一貫したハッシュ交換タイプです。YMMV ですが、各サーバーのコアごとに 1 つのキューが必要になると思います。

于 2014-04-06T21:51:16.700 に答える