4

Linux で多くのソケット サーバーの前に配置されるソフトウェア ロード バランサーを作成することを計画しています。クライアントはロード バランサーに接続します。ロード バランサーは、代替 IP とそのポートのテーブルを維持します。クライアントを利用可能な最適な IP とポートに接続し、クライアントから切断します。したがって、シーンから出ます (クライアントに接続されなくなります)。この状態では、接続されたデバイスのみがクライアントになり、新しいソケットサーバーですが、ロードバランサーではありません。

Example : Cleint ip 10.1.2.3 port 1234  
           load balancer Ip 10.1.2.4 port 1235
           list of socket servers   in Load Balancer: 
           A Ip 10.1.2.4 port 1236 
           B Ip 10.1.2.4 port 1237
           C  Ip 10.1.2.5 port 1238
    Now 
for the 1st request to the load balancer from client, the load balancer  will establish a connection between the client &  server A and disconnect itself from client.
     for the 2nd request to the load balancer from client, the load balancer  will establish a connection between the client &  server B and disconnect itself from client.
     for the 3rd request to the load balancer from client, the load balancer  will establish a connection between the client &  server C and disconnect itself from client.

Any Help on implementing this in Java is greatly appreciated.
4

4 に答える 4

2

ルックアップ テーブルの格納には redis を使用します。各ロードバランサー サーバーは、最も利用可能で最も優先度の高いサーバーへの接続を求めて、redis のルックアップ テーブルを検索します。このルックアップは、サーバーのインデックスである単一の整数を返します。クライアントの各アプリは、サーバー IP をそれぞれのインデックスと共に保存します。したがって、このルックアップは非常に高速で、30 ミリ秒未満です。この時点で、接続はより高速になります。リダイレクトは必要ありません。同時接続があり、アプリが検索されたサーバーへの接続を試行するまでに目的のサーバーの qouta が終了した場合に備えて、フォールバックも提供されます。この場合、最も利用可能な server を再度検索します。つまり、接続が成功するか、すべてのリソースが終了し、接続要求がデッドエンドとしてマークされるまで、再帰的に最初からやり直します。

ルックアップごとに、数ミリ秒間接続を予約するのはどうですか? そのルックアップに接続するための遅延の期限が切れた後、ページ ファイルは新しい接続のために使用できるようになります。これにより、再帰的なルックアップが減少しますが、接続もブロックされます。遅延は、接続を確立するのに十分なはずです。一方、この遅延中に新しい接続がブロックされるため、ユーザー エクスペリエンスが低下する可能性があります。これら 2 つの間のトレードオフが必要です: ルックアップを減らして接続をブロックするか、接続を決してブロックせず、非常に高速な再帰的なルックアップに耐えるかです。

于 2016-01-06T11:54:29.283 に答える
0

ロード バランサーがクライアントから切断する必要があるという要件がよくわかりません。ソケットが実際に TCP 接続のように見える場合、低レベルのハッカーを使用せずに、どこかで実行されているクライアントに接続をオフロードする方法がわかりません。たとえば、linux virtual serverの ldirectord を見てください。これにより、接続を完全にオフロードできます。

純粋に単純にするために、HAProxyを使用します。接続のオフロードを除いて、必要なことのほとんどを行います。

最後に、ある種のラウンドロビン DNS ソリューションを使用することもできます。また、必要に応じて接続をオフロードします。

于 2013-04-22T09:26:58.310 に答える