ZeroMQ、RabbitMQ、Apache Qpid のパフォーマンス比較 質問する

ZeroMQ、RabbitMQ、Apache Qpid のパフォーマンス比較 質問する

アプリケーションには高性能なメッセージ バスが必要なので、、およびのパフォーマンスを評価していますZeroMQRabbitMQパフォーマンスApache Qpidを測定するために、メッセージ キュー実装の 1 つを使用して 10,000 件のメッセージを公開するテスト プログラムを実行し、同じマシンで別のプロセスを実行してこれらの 10,000 件のメッセージを消費します。次に、公開された最初のメッセージと受信された最後のメッセージの間の時間差を記録します。

比較に使用した設定は次のとおりです。

  1. RabbitMQ: 「ファンアウト」タイプの交換とデフォルト構成のキューを使用しました。RabbitMQ C クライアント ライブラリを使用しました。
  2. ZeroMQ: パブリッシャーはソケットを使用して にパブリッシュしtcp://localhost:port1ZMQ_PUSHブローカーはtcp://localhost:port1をリッスンして tcp://localhost:port2 にメッセージを再送信し、コンシューマーはソケットtcp://localhost:port2を使用して をリッスンします。ブローカーを使用する他のメッセージ キュー実装とパフォーマンスを比較するために、ZMQ_PULLピアツーピア通信ではなくブローカーを使用しています。ZeroMQ
  3. QpidC++ メッセージ ブローカー: 「ファンアウト」タイプの交換と、デフォルト構成のキューを使用しました。Qpid C++ クライアント ライブラリを使用しました。

パフォーマンス結果は次のとおりです。

  1. RabbitMQ: 10,000 件のメッセージを受信するのに約 1 秒かかります。
  2. ZeroMQ: 10,000 件のメッセージを受信するには約 15 ミリ秒かかります。
  3. Qpid: 10,000 件のメッセージを受信するのに約 4 秒かかります。

質問:

  1. メッセージ キュー間で同様のパフォーマンス比較を実行した人はいますか? 実行したことがある人はいますか? 結果と皆さんの結果を比較してみたいと思います。
  2. チューニングしRabbitMQたり、Qpidパフォーマンスを向上させる方法はありますか?

注記:

テストは、2 つのプロセッサが割り当てられた仮想マシンで実行されました。結果はハードウェアによって異なる場合がありますが、私は主に MQ 製品の相対的なパフォーマンスに興味があります。

ベストアンサー1

RabbitMQ はおそらくこれらのメッセージを永続化しています。永続化しないようにするには、メッセージの優先度またはメッセージ内の別のオプションを設定する必要があると思います。そうすれば、パフォーマンスは 10 倍向上します。AMQP ブローカー経由で少なくとも 100K メッセージ/秒を期待する必要があります。OpenAMQ では、最大 300K メッセージ/秒のパフォーマンスが得られました。

AMQPだった速度を重視して設計されています (たとえば、メッセージをルーティングするためにメッセージを解凍しません) が、ZeroMQ は重要な点で単純に設計が優れています。たとえば、ブローカーなしでノードを接続することでホップがなくなり、どの AMQP クライアント スタックよりも非同期 I/O が優れ、より積極的なメッセージ バッチ処理が行われます。ZeroMQ の構築に費やされた時間の 60% は、パフォーマンス チューニングに費やされたと思われます。非常に大変な作業でした。偶然に高速になったわけではありません。

私がやりたいことの一つは、ZeroMQ の上に AMQP のようなブローカーを作り直すことですが、忙しすぎます。ここに最初のレイヤーがあります:http://rfc.zeromq.org/spec:15スタック全体は RestMS のように動作し、トランスポートとセマンティクスが 2 つのレイヤーに分離されます。AMQP/0.9.1 とほぼ同じ機能 (セマンティクス的に相互運用可能) を提供しますが、大幅に高速化されます。

おすすめ記事