4

フロントエンドサーバーがタスクをバックエンドサーバーに送信する、 N台のフロントエンドサーバーとM台のバックエンドワーカー用のZeroMQアーキテクチャを設計しようとしています。フロントエンド サーバーはバックエンド サーバーに関する情報を持っていますが、バックエンド サーバーはフロントエンドについて知りません。2 種類のタスクがあります。1 つはラウンド ロビンを使用して 1 つのバックエンド サーバーにのみ移動するタイプで、もう 1 つはすべてのバックエンド サーバーにブロードキャストする必要があります。単一障害点になるため、中央ブローカーは持ちたくありません。

最初のタイプのタスクではリクエスト/レスポンス パターンが適切なようですが、2 番目のタイプではパブリッシャー/サブスクライバー パターンになります。しかし、この 2 つを組み合わせたパターンはどうでしょうか。すべてのバックエンド サーバーまたは 1 つのランダムなバックエンド サーバーにメッセージを送信する場合、送信時に選択できるパターンはありますか?

私が思いついた解決策は、パブリッシャー/サブスクライバーを使用し、メッセージの先頭にバックエンド サーバー ID を追加し、それがすべてにアドレス指定されている場合は何らかの魔法の値を付加することです。ただし、これにより不要なトラフィックが大量に発生します。それを行うためのよりクリーンで効率的な方法はありますか?

4

2 に答える 2

1

私が唯一の可能性として見ているのは、DEALER-ROUTERの組み合わせを使用することです。フロントエンドにDEALER、バックエンドにROUTER。すべてのフロントエンドサーバーには、すべてのバックエンドサーバー(ブロードキャスト用)用のDEALERソケットと、ラウンドロビン用に一度にすべてのバックエンドサーバーに接続された1つのDEALERソケットが含まれている必要があります。それでは、その理由を説明しましょう。

  1. このような重大なケースでは、PUB-SUBを実際に使用することはできません。そのパターンは、メッセージをサイレントに非常に簡単にドロップでき、キューに入れられないためです。したがって、実際には、PUBに投稿されたメッセージは、バックグラウンドで(切断)接続されているため、SUBの任意のサブセットに到達する可能性があります。このため、すべてのバックグラウンドサーバーに割り当てられたDEALERソケットをループして、ブロードキャストをシミュレートする必要があります。バックエンド部分が接続されていない場合はメッセージをキューに入れますが、HWMに注意してください。唯一の最終的な解決策は、ハートビートを使用してバックエンドが停止したことを認識し、それに割り当てられたソケットを破棄することです。
  2. バックグラウンドのROUTERソケットは、任意の数の要求を非同期で受け入れることができ、ROUTERソケットであるため、タスクを要求したフロントエンドに応答を送り返すのが非常に簡単であるため、論理的なソリューションです。バックグラウンドサーバーに単一のルーターを配置することで、ブロードキャストが行われていることに気付かないようにすることができ、すべてを直接の要求と見なします。放送は純粋にフロントエンドのものです。このソリューションの唯一の問題は、バックエンドサーバーの速度が十分でない場合、すべてのフロントエンドサーバーがサーバーをいっぱいにして、HWMに到達し、パッケージのドロップを開始する可能性があることです。ROUTERソケットからのメッセージを処理するスレッド/プロセスを増やすことで、これを防ぐことができます。zmq_proxy()は、このようなものに役立つ関数です。

お役に立てれば ;-)

于 2013-01-15T00:48:34.953 に答える
1

私はおそらくpub sub メッセージ エンベロープを使用します - UDP 経由で pub/sub ブロードキャストを使用している場合、不必要なネットワーク トラフィックが生成されるとは思いませんが、余分な処理が発生しますが、これらのほとんどと同様に、これらの間のトレードオフですエレガントなデザインとパフォーマンス。ØMQ は最初にパフォーマンスのルートを取る傾向がありますが、私はそれを測定し、定量化されたパフォーマンス結果を使用して、これが許容できるかどうかを判断したいと考えています。

私にとって洗練された解決策は、2 セットのソケットを使用することです。これは、それ自体がシステム全体のワークフローを差別化するためです。一方、単一のソケットを使用すると、非常に非 ØMQ の方法で物事が混同されます。これらは、将来の変更を可能にするために異なる必要があります。および動的/不安定なシステム。

于 2012-05-15T11:56:30.157 に答える