我已經開發了Java中的負載平衡器。它負責在一組修復的服務器之間平衡傳入的請求。但是現在這些服務器可以動態啓動/關閉,並且可以動態添加新服務器(這意味着我沒有固定的IP地址列表)。如何檢測從我的Java應用程序在我的網絡中啓動/停止的新服務器
我想知道什麼是從Java自動發現網絡中的新服務器(或檢測到任何服務器正在關閉,因此停止向它發送請求)的最佳方式。
我已經開發了Java中的負載平衡器。它負責在一組修復的服務器之間平衡傳入的請求。但是現在這些服務器可以動態啓動/關閉,並且可以動態添加新服務器(這意味着我沒有固定的IP地址列表)。如何檢測從我的Java應用程序在我的網絡中啓動/停止的新服務器
我想知道什麼是從Java自動發現網絡中的新服務器(或檢測到任何服務器正在關閉,因此停止向它發送請求)的最佳方式。
在純Java中,一種可能性是有一個「註冊」服務器(衆所周知,意思是修復IP或DNS條目),其中新的upcomming服務器註冊他們已啓動併發送一些心跳信號表示他們活着。
「註冊」服務器可能有一個REST接口,可以輕鬆地爲其他感興趣的部分獲取系統狀態。
這似乎是一個概念問題。做到這一點的最佳方式是擁有一箇中央管理器,所有服務器都可以註冊自己並在其狀態發生變化時設置其狀態。您的程序可能是該管理員,或者如果您想在任何地方執行該程序,請向經理索要註冊的服務器。當然,您至少需要一臺靜態機器,並且您的所有服務器程序都必須更改才能執行註冊。
否則,您唯一的選擇是嘗試連接到每個服務器,並假設連接失敗時關閉。如果你甚至不知道IP,你不得不遍歷每個可能的IP,這是一件非常糟糕的事情。
如果您知道服務器在8080上像Tomcat一樣偵聽的端口,那麼定期掃描所有機器的端口以檢查服務器是否在某臺機器上啓動。
您可以使用java套接字程序掃描每個機器的端口,或者您可以藉助UDP。但無論哪種情況,您都需要了解套接字編程。
如果您的網絡支持多播,那麼這是一個選項。 Tomcat實際上使用多播爲servlet集羣進行服務發現。
請參閱Tomcat's Clustering Howto瞭解他們如何做的更多細節,這可能會爲您創建一個良好的起點。