大量かつ大量のプロダクション環境でメッセージバスとマルチキャストの両方の経験を持ち、経験豊富なネットワークエンジニアと問題について話したところ、あなたがブロードキャストしている場合を除き、ペストのようなマルチキャストは避けるべきです非常に高い数のノード(数百)。
マルチキャストを使用する場合は、信頼性の低いプロトコルであることを理解する必要があります。メッセージが欠落したり、重複したりすることがあります。マルチキャストの上に信頼性プロトコル(再試行、重複検出、再送信)を有効にするには、それを正確にするために多くの時間を費やす必要があります。私が参考にしたいと思っているマルチキャスティングのロボット式タンクの軍事試験についての良い逸話があります。基本的には「90度右に曲がり、90度右に曲がり、それらのうちのいくつかは右折メッセージを1回だけ受信し、他のものは3を受信し、それは騒乱のレシピです。
共有する必要がある情報の種類によっては、いくつかのオプションがあります。
設定情報を共有している場合は、Zookeeperのようなものを見てください。軽量で信頼性が高く使いやすいです。共有状態の最新の値は常に使用可能であり、持続されます。メッセージバスでは、モジュールが停止して最後のコンフィグレーションメッセージが失われた場合でも、再送プロトコルが必要です。
メッセージバスに関しては、複雑なものになる可能性があります。しかし、私はそのカテゴリにZeroMQを必ず入れません。それはメッセージバスをエミュレートすることができますが、ポイントツーポイントメカニズムのほうがはるかです。私は生産では使用していませんが、私が行った研究とプロトタイプ作成は非常に有利でした。
別のオプションとして、Oracle Coherence、GridGain、GigaSpacesなどの分散データ・グリッドを使用できます。繰り返しますが、これはインストールとメンテナンスのための別のアプリケーションであり、複雑さが増しますが、データグリッドには多くの用途があります。
もう1つのMQオプションはHornetMQです。私はそれを使用していません(SonicとMQシリーズの両方の社内MQを社内で使用していますが)。
D-Busは、1台のマシン上での通信に最適化されているようですが、ピアツーピア、クラスタリング、または他の同様のことを行っている場合、FAQは他の場所を探すことをお勧めします。警告:私はDバスを使ったことは一度もありませんので、基本的に読んだ情報を逆流させています。
どのようなメッセージレート、サイズ、持続性、および信頼性の要件がありますか? –
@ScottA。情報を共有する必要がある約30のモジュールがあります。メッセージレートはあまり高くありません。これは主に、他のモジュールに伝達される必要がある状態情報である。状態が変化したとき、またはモジュールが状態変数の値を要求したとき。パブリッシュ/サブスクライブ・シナリオでは信頼性は大きな問題ではありませんが、要求/応答シナリオでは重要です。 –
どのくらいの情報が共有状態で保持されていますか? Zookeeperの場合、ユースケースは高い読み込み、低い書き込み、かなり少量のデータです。メッセージングシステムではありませんが、メッセージングシステムとして悪用される可能性があります。 –