2011-11-14 5 views
4

私は、いくつかのモジュールで構成され、互いに情報を共有する必要があるアプリケーションを開発中です。例:公開/購読シナリオでは、モジュールがいくつかの情報(状態変数など)を公開し、特定の情報に関心のあるモジュールがそれを入手するシナリオを示します。または要求/応答シナリオで、関心のあるモジュールが情報について明示的に質問し、回答を得たシナリオ。メッセージバスとマルチキャスト

Iは、異なるメッセージ・バスの実装、すなわちD-バスØMQのRabbitMQQPID(後者の二つは、AMQPに基づいている)に探しています。しかし、誰かが複雑で重いメッセージバスの実装を試みるのではなく、単に問題を解決するためにマルチキャストを使用しないことを指摘しました。

マルチキャストが本当に問題を解決できるかどうか、そして2つのソリューションの長所と短所を理解できるかどうかの経験が不足しているので、私は親切に私を助けるように要請します。非常に感謝しますか?

+0

どのようなメッセージレート、サイズ、持続性、および信頼性の要件がありますか? –

+0

@ScottA。情報を共有する必要がある約30のモジュールがあります。メッセージレートはあまり高くありません。これは主に、他のモジュールに伝達される必要がある状態情報である。状態が変化したとき、またはモジュールが状態変数の値を要求したとき。パブリッシュ/サブスクライブ・シナリオでは信頼性は大きな問題ではありませんが、要求/応答シナリオでは重要です。 –

+0

どのくらいの情報が共有状態で保持されていますか? Zookeeperの場合、ユースケースは高い読み込み、低い書き込み、かなり少量のデータです。メッセージングシステムではありませんが、メッセージングシステムとして悪用される可能性があります。 –

答えて

4

大量かつ大量のプロダクション環境でメッセージバスとマルチキャストの両方の経験を持ち、経験豊富なネットワークエンジニアと問題について話したところ、あなたがブロードキャストしている場合を除き、ペストのようなマルチキャストは避けるべきです非常に高い数のノード(数百)。

マルチキャストを使用する場合は、信頼性の低いプロトコルであることを理解する必要があります。メッセージが欠落したり、重複したりすることがあります。マルチキャストの上に信頼性プロトコル(再試行、重複検出、再送信)を有効にするには、それを正確にするために多くの時間を費やす必要があります。私が参考にしたいと思っているマルチキャスティングのロボット式タンクの軍事試験についての良い逸話があります。基本的には「90度右に曲がり、90度右に曲がり、それらのうちのいくつかは右折メッセージを1回だけ受信し、他のものは3を受信し、それは騒乱のレシピです。

共有する必要がある情報の種類によっては、いくつかのオプションがあります。

設定情報を共有している場合は、Zookeeperのようなものを見てください。軽量で信頼性が高く使いやすいです。共有状態の最新の値は常に使用可能であり、持続されます。メッセージバスでは、モジュールが停止して最後のコンフィグレーションメッセージが失われた場合でも、再送プロトコルが必要です。

メッセージバスに関しては、複雑なものになる可能性があります。しかし、私はそのカテゴリにZeroMQを必ず入れません。それはメッセージバスをエミュレートすることができますが、ポイントツーポイントメカニズムのほうがはるかです。私は生産では使用していませんが、私が行った研究とプロトタイプ作成は非常に有利でした。

別のオプションとして、Oracle Coherence、GridGain、GigaSpacesなどの分散データ・グリッドを使用できます。繰り返しますが、これはインストールとメンテナンスのための別のアプリケーションであり、複雑さが増しますが、データグリッドには多くの用途があります。

もう1つのMQオプションはHornetMQです。私はそれを使用していません(SonicとMQシリーズの両方の社内MQを社内で使用していますが)。

D-Busは、1台のマシン上での通信に最適化されているようですが、ピアツーピア、クラスタリング、または他の同様のことを行っている場合、FAQは他の場所を探すことをお勧めします。警告:私はDバスを使ったことは一度もありませんので、基本的に読んだ情報を逆流させています。

+0

お返事ありがとうございました。これは主に、モジュールが共有しなければならない状態情報です。私は間違いなく、動物園に見ていきます。残念ながら、あなたが言及した他のソリューションは、メモリとCPUリソースが限られているハードウェアで実行する必要があるため、ソフトウェアのサイズが問題になるとは考えられません。 –

+0

@JahanzebFarooq ZookeeperはおそらくHornetMQのようなフットプリントを持っています。繰り返しますが、それはあなたが取引しているものに依存します。状態情報は動物園のユースケースのように間違いなく聞こえます。軽量のものを探している場合はZeroMQも良い選択ですが、上に再送プロトコルを追加する必要があります。何台のマシンが通信する必要がありますか? –

+0

典型的なシナリオでは、すべてが同じホスト上にあります。しかし、特定のモジュールが異なるホスト間で通信する必要があるより高度なシナリオでは、ホストの数は10から50までの範囲になる可能性があります。 –

1

パケット/メッセージがドロップされたり、紛失したりすることが心配ですか?マルチキャストはデフォルトでは行われませんが、メッセージバスはこれらの問題を処理または緩和できます。

+2

これはコメントだったはずです。あなたが質問に答える前に、コメントを介して必要な説明を収集してください。 –

関連する問題