ActiveMQ で Openwire と AMQP を使用し、スループットに大きな変動がある場合のパフォーマンス ベンチマークを実行しようとしています。
Openwire の使用
永続的なメッセージ サイズ: 43 バイト、圧縮なし、200 の同時接続、約 9006 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、約 3678.86 メッセージ/秒のスループット。
5% 未満のCPU にはあまり負荷がかからないため、圧縮を使用してスループットを向上させることができますが、それは別の話です。
AMQP 1.0 の使用
永続的なメッセージ サイズ: 43 バイト、圧縮なし、200 の同時接続、約 12.8 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、約 11.9 メッセージ/秒のスループット。
私たちの構成は次のとおりです
**Client**
- JMeter 2.11 using Apache QPid 0.28 as AMQP 1.0 client
- Java 1.7
- Ubuntu 12.04 LTS Quad Core 2.0 GHz,7GB RAM, 512 KB Cache
**Broker**
- ActiveMQ 5.10 with KahaDB, using LevelDB didn't give much different numbers
- Java 1.7
- Ubuntu 12.04 LTS Quad Core 2.0 GHz,7GB RAM, 512 KB Cache
チューニング作業:
私は次を見ました
Openwire の場合、Broker 側で tcp を nio に変更
<transportConnector name="openwire" uri="nio://0.0.0.0:61616?maximumConnections=1000&wireFormat.tcpNoDelayEnabled=true&wireFormat.maxFrameSize=104857600"/>
On Client side url was as
tcp://<broker ip>:61616?jms.useAsyncSend=true
AMQP 1.0 の場合、ブローカー側で nio に変更し、url にいくつかのオプションを追加しましたが、明らかな効果はありません
<transportConnector name="amqp" uri="amqp+nio://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
On Client side
connectionFactory = amqp://username:password@<broker ip>:5672?remote-host=default
Openwire で利用可能なすべてのチューニング オプションは amqp では利用できません。特に jms.useAsyncSend=true を使用するプロデューサーでは、もちろん ack の信頼性は低くなりますが、パフォーマンスが大幅に向上しました。デフォルトでは、amqp を使用したメッセージの送信はデフォルトで非同期モードになっていることがわかりました。どうやら数字は、同期モードで処理されている可能性があることを示していますか?
ここに私がすでに調べているリンクのいくつかがあります
- http://activemq.apache.org/amqp.html
- http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/
- http://activemq.2283324.n4.nabble.com/Interesting-Persistent-Messaging-Performance-td4676001.html
- http://activemq.2283324.n4.nabble.com/Any-Performance-Latency-benchmarks-for-ActiveMQ-s-AMQP-implementation-against-OpenWire-td4674713.html
- http://www.slideshare.net/ceposta/activemq-performance-tuning#
http://working-with-activemq.blogspot.com/2012/05/performance-improvements.html
認識していない ActiveMQ AMQP や QPid の構成 (接続またはチャネル用) またはチューニング オプションはありますか?
更新 1:
Tim が以下で指摘したように、私の比較は間違っていました。私は Openwire に Async.Send を使用し、AMQP 1.0 に Sync.Send を使用していました。AMQP 1.0 がデフォルトで Async.Send を使用するというのは私の誤解でした。Robbie は、持続メッセージには当てはまらないと指摘しました。これが正しい比較数値です
Openwire Persistent メッセージ サイズを使用した同期送信: 43 バイト、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 13.1 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 13.1 メッセージ/秒のスループット。
AMQP 1.0 パーシステント メッセージ サイズを使用した同期送信: 43 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 12.8 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 11.9 メッセージ/秒のスループット。
Openwire Persistent メッセージ サイズを使用した Async.Send: 43 バイト、圧縮なし、200 の同時接続、100,000 メッセージ数、約 9006 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 3678.86 メッセージ/秒のスループット。
AMQP 1.0 Persistent メッセージ サイズを使用した Async.Send: 43 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 21.7 メッセージ/秒のスループット。
永続的なメッセージ サイズ: 1580 バイ、圧縮なし、200 の同時接続、100,000 メッセージ カウント、約 21.2 メッセージ/秒のスループット。
ノート:
Async.Send メッセージの配信は保証されていませんが、Openwire を使用すると常に 100,000 件のメッセージをすべて受信しましたが、AMQP 1.0 では約 25% のメッセージが失われました。
AMQP 1.0 Async.Send の数値は、まだ Openwire Async.Send の数値に近くありません。他の提案はありますか?
ご協力いただきありがとうございます。