8

主要なWebアプリケーション(AmazonのEC2クラウド、x-largeインスタンス)のバックエンドフレームワークの今後の再設計のために、(Java)メッセージングおよびキューイングシステムのトレードス​​タディを実行しています。現在、ActiveMQとRabbitMQを評価しています。

計画では、5つの異なるキューがあり、そのうちの1つはデッドレターキューです。1日に送信されるメッセージの数は、40Kから400Kの間のどこかになります。メッセージの内容をデータストア上のXMLファイルの場所へのポインターにすることを計画しているので、メッセージは約64バイトになると思います。ただし、評価のために、平均ファイルサイズが3KBの生のXMLをメッセージで送信することも検討したいと思います。

私の主な質問:毎日いつ/いくつのメッセージを保持する必要がありますか?上記で指定した量を考慮して、すべてのメッセージを保持することは合理的ですか?永続化すると、おそらく大幅にパフォーマンスが低下することを私は知っています。しかし、永続化しないことにより、多くのRAMが使用されています。あなたの何人かは何をお勧めしますか?

また、ActiveMQ(JMS)とRabbitMQ(AMQP)に関してオンラインで多くの情報があることも知っています。私はたくさんの研究とテストをしました。どちらの実装も私のニーズに合うようです。上記で提供した情報(ファイルサイズとメッセージ数)を考慮して、私が見逃した可能性のある特定のベンダーを使用する理由を誰かが指摘できますか?

ありがとう!

4

3 に答える 3

5

毎日いつ/いくつのメッセージを永続化する必要がありますか?上記で指定した量を考慮して、すべてのメッセージを保持することは合理的ですか?

JMSの永続性はデータベースに取って代わるものではなく、データのプロデューサーとコンシューマーの間の短期間のバッファーと見なす必要があります。とは言うものの、あなたが言及するメッセージの量/サイズは、最新のJMSシステム(とにかく適切に構成されている)の永続性アダプターに負担をかけず、必要に応じてメッセージを長期間バッファリングするために使用できます(信頼できるメッセージストアアーキテクチャを使用するだけです)

永続化すると、おそらく大幅にパフォーマンスが低下することを私は知っています。しかし、永続化しないことにより、多くのRAMが使用されています。あなたの何人かは何をお勧めしますか?

私の経験では、メッセージの永続性を有効にすることは、パフォーマンスに大きな影響を与えることはなく、ほとんどの場合、メッセージを保証するために行われます。ほとんどのアプリケーションでは、アップストリーム(プロデューサー)またはダウンストリーム(コンシューマー)のプロセスがボトルネック(特にデータベースI / O)になります...JMS永続ストアではありません

また、ActiveMQ(JMS)とRabbitMQ(AMQP)に関してオンラインで多くの情報があることも知っています。私はたくさんの研究とテストをしました。どちらの実装も私のニーズに合うようです。上記で提供した情報(ファイルサイズとメッセージ数)を考慮して、私が見逃した可能性のある特定のベンダーを使用する理由を誰かが指摘できますか?

私は、少量および大量のメッセージングの両方で、多くのプロジェクトでActiveMQを正常に使用してきました。統合複雑なルーティングパターンを合理化するために、 ApacheCamelなどのルーティングエンジンと一緒に使用することをお勧めします

于 2012-10-01T22:51:10.580 に答える
4

メッセージングシステムを一時ストレージとして使用する必要があります。アプリケーションは、メッセージをできるだけ早くプルするように設計する必要があります。メッセージの数が多いほど、パフォーマンスは低下します。メッセージをプルする場合は、パフォーマンスが向上し、メモリ使用量が少なくなります。メッセージはパフォーマンスを向上させるためにメモリに保持され、メッセージタイプが永続的である場合にのみディスクにバックアップされるため、永続的かどうかは引き続きメモリを使用します。

メッセージの永続性に関する決定は、メッセージの重要度と、メッセージングプロバイダーの再起動後も存続する必要があるかどうかによって異なります。

IBMWebSphereMQをご覧になることをお勧めします。それはあなたの要件を満たすことができます。これには、JMSと、アプリケーションを開発するための独自のAPIがあります。

于 2012-10-01T15:05:21.617 に答える
0

ActiveMQはオープンソースのJMSに適していますが、私がお勧めできるより高価なものはTIBCOEMSまたはSolaceです。

ただし、JMSは実際には1回限りの配信用に構築されており、より長い永続性は仕様から除外されています。もちろんデータベースに行くこともできますが、それは重く、おそらく高価です。

私がお勧めするのは(注:CodeStreetで働いています)、「ReplayServiceforJMS」です。あらゆるタイプのJMSメッセージ(またはネイティブWebSphere MQメッセージ)を高性能のファイルベースのディスクストレージに保存できます。各メッセージには、ナノ秒のタイムスタンプと、発行時に上書きできるglobalMsgIDが自動的に割り当てられます。したがって、XMLメッセージはReplayServerによって記録され、実際のメッセージには参照としてglobalMsgIDが含まれる可能性があります。そして多分いくつかのプロパティ?

受信者がglobalMsgIDを受信すると、必要に応じて、ReplayServerからそのメッセージを再生できます。

ただし、その一方で、400K *3KBのXMLメッセージはActiveMQなどで簡単に実行できるはずです。また、送信する前にXMLメッセージを圧縮する必要があります。

于 2015-02-03T14:21:24.327 に答える