Javaでロードバランサーを開発しました。サーバーの修正セット間で着信要求の負荷を分散します。しかし、これらのサーバーは動的に起動/シャットダウンできるようになり、新しいサーバーを動的に追加できるようになりました (これは、IP アドレスの固定リストがないことを意味します)。
ネットワーク内の新しいサーバーを自動的に検出する (またはサーバーがシャットダウンしていることを検出して、サーバーへの要求の送信を停止する) ための (Java からの) 最善の方法を知りたいです。
Javaでロードバランサーを開発しました。サーバーの修正セット間で着信要求の負荷を分散します。しかし、これらのサーバーは動的に起動/シャットダウンできるようになり、新しいサーバーを動的に追加できるようになりました (これは、IP アドレスの固定リストがないことを意味します)。
ネットワーク内の新しいサーバーを自動的に検出する (またはサーバーがシャットダウンしていることを検出して、サーバーへの要求の送信を停止する) ための (Java からの) 最善の方法を知りたいです。
これはコンセプトの問題のようです。これを行う最善の方法は、すべてのサーバーが自分自身を登録し、変更された場合にステータスを設定できる中央マネージャーを用意することです。プログラムをそのマネージャーにするか、どこでも実行したい場合は、マネージャーに登録済みのサーバーを尋ねます。もちろん、そのためには少なくとも 1 台の静的マシンが必要であり、登録を実行するにはすべてのサーバー プログラムを変更する必要があります。
それ以外の場合、唯一の選択肢は、各サーバーに接続しようとし、接続が失敗した場合はオフであると想定することです。IP がわからない場合は、考えられる各 IP を反復処理する必要がありますが、これは非常に悪いことです。
純粋な Java での 1 つの可能性は、「登録」サーバー (よく知られている、IP または DNS エントリを修正することを意味します) を持つことです。ここで、新しい今後のサーバーは、稼働していることを登録し、ハートビートを送信して、それらが生きていることを知らせます。
「登録」サーバーには、他の興味深い部分のシステムステータスを簡単に取得するための REST インターフェイスがある場合があります。
サーバーがリッスンしているポートが 8080 の tomcat のようにわかっている場合は、すべてのマシンのポートを定期的にスキャンして、サーバーが一部のマシンで起動しているかどうかを確認できます。
Java ソケット プログラムを使用して各マシンでそのポートをスキャンするか、UDP を利用することができます。ただし、どちらの場合も、ソケット プログラミングについて知っておく必要があります。
ネットワークがマルチキャストをサポートしている場合、それはオプションです。Tomcat は実際にマルチキャストを使用して、サーブレット クラスタリングのサービス検出を行います。
その方法の詳細については、 Tomcat の Clustering Howtoを参照してください。