現在、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 の関係によって、パフォーマンスに違いは生じますか?
- 最後に、この場合は何をお勧めしますか? (コンシューマーを動的に構成することはできません)