web-dev-qa-db-ja.com

Rabbitmq-合理的なパフォーマンス/規模の期待

誰かがrabbitmq(「平均的な」ハードウェア、fwiw)の妥当なスケールの数値/制限の方向に向けてくれたり、そのパフォーマンスについての経験を投稿したりできるとありがたいです。私は、キューの数、キュー上のサブスクライバーの数、ファンアウトキューに数百または数千のリスナーを配置することによるパフォーマンスへの影響、大容量環境でうさぎを実行している可能性のあるハードナンバーを把握しようとしています。

13
user21640

まず第一に、あなたはあなたのリストのどのアイテムがあなたがヒットするかもしれないスケーリング限界を持ち、どれがそうでないかを理解する必要があります。これのいくつかは実装に依存しているので、例えばRabbitMQ in Actionのような内部を読むのに役立ちます。

キューの数はRAMによって制限されます。一方、再生中のメッセージの数はRAMによって制限されません。RabbitMQが自動的にメッセージをディスクにページングするためです。開発サーバーで約800万のメッセージが誤って再生サーバーに届くと、私は注意を払っていませんでした。

メッセージサイズにも制限はありませんが、1つのメッセージのサイズが512Kを超える場合は、慎重に検討する必要があります。結局、メモリキャッシュを使用してアプリケーション間で大きなオブジェクトを渡し、memcacheキーを含む小さな制御メッセージのみを送信しました。ただし、本当に必要な場合は、JARファイルなどの巨大なJPEGおよびバイナリオブジェクトをメッセージとして送信できます。

サブスクライバーは少なくとも1つのTCPソケットを開く必要があるため、サブスクライバーの数はOSの制限です。もちろん、ほとんどのOSでは調整可能です。そのため、マイレージは異なります。そのため、テストする必要があります。私はJMETERを使用してWebアプリケーションの負荷テストを行っていましたが、このAMQPプラグイン https://github.com/jlavallee/JMeter-Rabbit-AMQP を見つけましたが、まだ使用していません。いずれにせよ、これは、ハードウェア(またはVM config))が合理的に処理する内容をすばやく伝える種類のテストです。

あなたが持っている唯一の困難なことは、ファンアウトキューに対して多数のコンシューマをテストすることです。代わりにトピック交換を使用して比較することもできます。コンシューマは、同じ最終結果を達成するワイルドカード(*)バインディングキーを使用してサブスクライブします。できるだけ多くの異なるマシンでこのテストを実行して、コンシューマプロセスを実行している単一のサーバーが原因でボトルネックが発生していないことを確認してください。追伸Jmeterプラグインは、コンシューマーのシミュレーションにも役立つ可能性があるように見えます。

11
Michael Dillon

これは実際には回答可能な質問ではありません-要素が多すぎます(「平均的な」ハードウェアの移動する定義、キュー内のメッセージのサイズ、コンシューマーの数、ポーリングの頻度/メッセージでの作業が完了するまでの時間など)。 。)。実際に環境をベンチマークする必要があります。

そうは言っても、RabbitMQのパフォーマンスに関するこれらの議論のいくつかをチェックしてください(インストールをベンチマークしてRabbitから何が期待できるかを確認する方法に関するいくつかのアイデアを含む)。

6
voretaq7