1

我用 Java 开发了一个负载均衡器。它在一组固定的服务器之间对传入请求进行负载平衡。但是现在这些服务器可以动态启动/关闭,并且可以动态添加新服务器(这意味着我没有固定的IP地址列表)。

我想知道自动发现网络中的新服务器(或检测到任何服务器正在关闭并因此停止向其发送请求)的最佳方式(来自 Java)是什么。

4

4 回答 4

1

这似乎是一个概念问题。做到这一点的最好方法是有一个中央管理器,所有服务器都可以在其中注册自己并在状态发生变化时设置它们的状态。您的程序可以是该管理器,或者,如果您想在任何地方执行它,请向管理器询问已注册的服务器。当然,您至少需要一台静态机器,并且必须更改所有服务器程序才能执行注册。

否则,您唯一的选择是尝试连接到每台服务器,并假设连接失败时它已关闭。如果您甚至不知道 IP,则必须遍历每个可能的 IP,这是一件非常糟糕的事情。

于 2013-07-04T09:29:42.320 回答
0

在纯 Java 中,一种可能性是拥有一个“注册”服务器(众所周知,意味着修复 IP 或 DNS 条目),其中新的即将到来的服务器注册它们已启动并发送一些心跳以表明它们还活着。

“注册”服务器可能有一个 REST 接口,以便为其他有趣的部分轻松获取系统状态。

于 2013-07-04T09:28:41.007 回答
0

如果您的网络支持多播,那么这是一个选择。Tomcat 实际上使用多播来为 servlet 集群进行服务发现。

有关他们如何执行此操作的更多详细信息,请参阅Tomcat 的 Clustering Howto,这对您来说可能是一个很好的起点。

于 2013-08-21T03:24:11.583 回答
0

如果您知道服务器正在侦听的端口,例如 8080 上的 tomcat。那么您可以定期扫描所有机器的端口,以检查服务器是否在某些机器上启动。

您可以使用 java 套接字程序扫描每台机器的该端口,也可以借助 UDP。但无论哪种情况,您都需要了解套接字编程。

于 2013-07-04T09:31:44.957 回答