2

私は qpid を使用しており、今はブローカーの少ないメッセージング システムに移行しようとしていますが、Pub Sub パターンのネットワーク トラフィックについて本当に混乱しています。次のドキュメントを読みました: http://www.250bpm.com/pubsub#toc4 サブスクリプションの転送が実際にどのように行われるのか本当に混乱していますか?

ゼロ mq は、基盤となるネットワーク トポロジに依存しない必要があると考えていましたが、そうではないようです。すべてのノードは、何を転送し、何を転送しないかをどのように認識していますか (たとえば、何百万ものサブスクライバーとパブリッシャーが存在する可能性のある eth ネットワークでは、メッセージ ツリーは実現可能ではないように思えます。ゼロ mq が存在する場合、彼らはそれらに接続されたサブスクライバーにどのようにパケットを転送しますか?彼らにとってそれは単なる通常のパケットであり、同じパケットであってもデータ パケットの複数のコピーを転送するだけでしょうか?私はネットワークの専門家ではないので、そうかもしれませんメッセージ ツリーと、それがどのように作成されるかについて明らかな何かが欠けているのでしょうか? この配布ツリーがどのように作成されるか、どのノードが xpub および xsub ソケットで作成されるかについて、いくつかの例を挙げていただけますか?

デバイス (リンクで使用される用語) はブローカーのようなものです。記事全体では、デバイスが実際にブローカのようなもの、それは pub sub の場合、メッセージング ツリー内のすべてのノードがデバイスであるという定義を満たさなければならないことを意味するのでしょうか。

また、ツリー ダイアグラム (P、D、C で構成されるリンクから) では、最初は C と C が 2 つのサブスクライバーであり、P が唯一のパブリッシャー (D はランダム ホップ) であると想定していましたが、今では D がゼロ分子量。C は D にサブスクライブし、D は P にサブスクライブしますか? または両方の C が P にサブスクライブするだけです (より一般的には、各ノードは でのみその親にサブスクライブします)。初心者の質問で申し訳ありませんが、ここで明らかなことを見逃しているようです。誰かがより多くの洞察を与えることができれば幸いです。

4

2 に答える 2

1

zeromq は、ネットワークを使用してノード間の接続を直接 (tcp 経由などで) 確立しますが、1 つの送信側と 1-n の受信側の間のみです。これらは「直接」接続され、基礎となるプロトコルを使用してメッセージを交換できます。

現在、pub-sub シナリオで特定のイベントのみをサブスクライブすると、zeromq がサブスクライバー側のメッセージを除外するために使用され、パブリッシャーから少なくとも多数のサブスクライバーへの不要なネットワーク トラフィックが発生していました。

zeromq の新しいバージョン (3.0 および 3.1) では、サブスクライバー プロセスはサブスクライバーのリストと関心のあるトピックを管理するパブリッシャーにサブスクリプション リストを送信します。関心のあるサブスクライバーのみにターゲットを絞ったメッセージを送信する可能性があります。

パブリッシャー自体がイベントのサブスクライバー (転送またはルーティング デバイス サービスなど) である場合、接続されたパブリッシャーに同様にサブスクライブすることによって、それらのサブスクリプションを再度転送する場合があります。

ただし、サブスクリプションを「転送」したとしても、zeromq が新しいバージョンでクライアント側のフィルタリングを行うかどうかはわかりません。

于 2012-04-17T15:27:26.683 に答える
0

複数のサブスクライバーへのpub/subのより効率的なメカニズムは、マルチキャストを使用することです。これにより、単一のメッセージがネットワークを通過し、すべてのサブスクライバーによって受信されます(サブスクライバーは必要なものをフィルター処理できます)。

ZeroMQは、 PragmaticGeneralMulticastと呼ばれる標準化された信頼性の高いマルチキャストをサポートしています。

これらのリファレンスは、すべてがどのように機能するかを理解するのに役立ちます。マルチキャストは通常​​、単一のサブLANでのみ機能し、複数のサブLANにまたがるにはルーター構成またはTCPブリッジが必要になる場合があることに注意してください。

于 2012-04-17T23:19:15.050 に答える