特定のアプリケーションでのサービス「名簿」の推奨事項に関するフィードバックを得ようとしています。クライアントとの永続的なソケット接続を維持するサーバー アプリがあります。分散インスタンスをサポートするサーバーをさらに開発したいと考えています。サーバー "A" は、他のオンライン サーバー インスタンスにデータをブロードキャストできる必要があります。他のすべてのアクティブなインスタンスについても同様です。
私が調査しようとしているオプション:
- Redis / Zookeeper / Doozer - 各サーバー インスタンスはそれ自体を構成サーバーに登録し、接続されているすべてのサーバーは構成の変更に応じて構成の更新を受け取ります。じゃあ何?
- 各サーバー インスタンスとのエンド ツー エンド接続を維持し、送信データごとにリストを反復処理しますか?
- 一部のカスタム UDP マルチキャストですが、その上に独自の信頼性を追加する必要があります。
- カスタム メッセージ ブローカー - 各サーバーが接続して通知するときにレジストリを実行および維持するサービス。各サーバーとの接続を維持してデータを受け入れ、それを他のサーバーに再ブロードキャストします。
- 各サーバー インスタンスが直接ブロードキャストするだけで、名簿が維持されない、信頼性の高い UDP マルチキャスト トランスポート。
ここに私の懸念があります:
- Zookeeper や doozer などの外部アプリに依存することは避けたいと思っていますが、それが最善の解決策である場合は明らかにそれらを使用します
- カスタム メッセージ ブローカーでは、スループットがボトルネックになることは望ましくありません。つまり、複数のメッセージ ブローカーを実行し、スケーリング時にロード バランサーを使用することも必要になる可能性があるということですか?
- マルチキャストは、自分でロールすることができれば外部プロセスを必要としませんが、それ以外の場合は、おそらく ZMQ を使用する必要があり、これも依存の状況に陥ります。
メッセージ配信についても話していることは理解していますが、それは私が使用するソリューションと密接に関連しています。ところで、私のサーバーは Go で書かれています。スケーラビリティを維持するための最も推奨される方法に関するアイデアはありますか?
* 目標の編集 *
私が本当に求めているのは、次の条件を考慮して、分散サーバーのインスタンス間でブロードキャスト データを実装する最良の方法は何かということです。
- 各サーバー インスタンスは、リモート クライアントとの永続的な TCP ソケット接続を維持し、それらの間でメッセージを渡します。
- メッセージは、関連するクライアント接続に配信できるように、実行中の他のインスタンスにブロードキャストできる必要があります。
- メッセージングは高速になる可能性があるため、低レイテンシーは重要です。
- 順序と信頼性が重要です。
*質問の要約を更新*
複数のサーバー/複数のエンドポイントがあり、相互にパブリッシュ/サブスクライブする必要がある場合、それらの間の推奨される通信モードは何ですか? 検出されたサーバーの名簿にメッセージを再発行するための 1 つ以上のメッセージ ブローカー? 各サーバーから直接、信頼できるマルチキャスト? 分散システムで複数のエンドポイントを接続し、遅延を低く、高速で、配信の信頼性を維持するにはどうすればよいでしょうか?