我在Java中开发了一个负载均衡器。它在一组修复服务器之间对传入请求进行负载平衡。但现在这些服务器可以动态启动/关闭,并且可以动态添加新服务器(这意味着我没有固定的IP地址列表)。
我想知道(从Java)自动发现网络中新服务器的最佳方式(或者检测到任何服务器正在关闭,因此停止向其发送请求)。
答案 0 :(得分:1)
这似乎是一个概念问题。执行此操作的最佳方法是拥有一个中央管理器,其中所有服务器都可以自行注册并在其发生更改时设置其状态。您的程序可以是该管理员,或者,如果您想在任何地方执行它,请向经理询问已注册的服务器。当然,您至少需要一台静态机器,并且必须更改所有服务器程序才能执行注册。
否则,您唯一的选择是尝试连接到每个服务器,并假设在连接失败时它已关闭。如果你甚至不知道IP,你必须迭代每个可能的IP,这是一件非常糟糕的事情。
答案 1 :(得分:0)
在纯Java中,一种可能性就是拥有一个“注册”服务器(众所周知,意味着修复IP或DNS条目),其中新的服务器注册它们已经启动并发送一些心跳来表示它们还活着。
“注册”服务器可能有一个REST接口,可以轻松获取其他有趣部分的系统状态。
答案 2 :(得分:0)
如果您知道服务器正在侦听的端口,如8080上的tomcat。然后,您可以定期扫描所有计算机的端口,以检查服务器是否在某台计算机上启动。
您可以使用java套接字程序扫描每台计算机上的端口,也可以使用UDP帮助。但无论哪种情况,您都需要了解套接字编程。
答案 3 :(得分:0)
如果您的网络支持多播,那么这是一个选项。 Tomcat实际上使用多播来进行servlet集群的服务发现。
有关他们如何做的更多详情,请参阅Tomcat's Clustering Howto,这可能是您的良好起点。