1

Javaでロードバランサーを開発しました。サーバーの修正セット間で着信要求の負荷を分散します。しかし、これらのサーバーは動的に起動/シャットダウンできるようになり、新しいサーバーを動的に追加できるようになりました (これは、IP アドレスの固定リストがないことを意味します)。

ネットワーク内の新しいサーバーを自動的に検出する (またはサーバーがシャットダウンしていることを検出して、サーバーへの要求の送信を停止する) ための (Java からの) 最善の方法を知りたいです。

4

4 に答える 4

1

これはコンセプトの問題のようです。これを行う最善の方法は、すべてのサーバーが自分自身を登録し、変更された場合にステータスを設定できる中央マネージャーを用意することです。プログラムをそのマネージャーにするか、どこでも実行したい場合は、マネージャーに登録済みのサーバーを尋ねます。もちろん、そのためには少なくとも 1 台の静的マシンが必要であり、登録を実行するにはすべてのサーバー プログラムを変更する必要があります。

それ以外の場合、唯一の選択肢は、各サーバーに接続しようとし、接続が失敗した場合はオフであると想定することです。IP がわからない場合は、考えられる各 IP を反復処理する必要がありますが、これは非常に悪いことです。

于 2013-07-04T09:29:42.320 に答える
0

純粋な Java での 1 つの可能性は、「登録」サーバー (よく知られている、IP または DNS エントリを修正することを意味します) を持つことです。ここで、新しい今後のサーバーは、稼働していることを登録し、ハートビートを送信して、それらが生きていることを知らせます。

「登録」サーバーには、他の興味深い部分のシステムステータスを簡単に取得するための REST インターフェイスがある場合があります。

于 2013-07-04T09:28:41.007 に答える
0

サーバーがリッスンしているポートが 8080 の tomcat のようにわかっている場合は、すべてのマシンのポートを定期的にスキャンして、サーバーが一部のマシンで起動しているかどうかを確認できます。

Java ソケット プログラムを使用して各マシンでそのポートをスキャンするか、UDP を利用することができます。ただし、どちらの場合も、ソケット プログラミングについて知っておく必要があります。

于 2013-07-04T09:31:44.957 に答える
0

ネットワークがマルチキャストをサポートしている場合、それはオプションです。Tomcat は実際にマルチキャストを使用して、サーブレット クラスタリングのサービス検出を行います。

その方法の詳細については、 Tomcat の Clustering Howtoを参照してください。

于 2013-08-21T03:24:11.583 に答える