创建多个Java TCP/IP服务器

创建多个Java TCP/IP服务器,java,tcp,Java,Tcp,我有一个Java TCP/IP客户机和服务器程序,它根据客户机的请求交换数据。我现在需要实现这个服务器的多个实例,每个实例都包含数据的一个子集,客户机仍然只连接到主服务器。实现这一点的最佳方法是什么,最好是不使用多线程?(我同意多线程将是对高可用性和性能的一种改进,尽管它不是严格必要的。) 如果您想要这样的方案: { ---> slave server 1 client ---> master server { ---> sl

我有一个Java TCP/IP客户机和服务器程序,它根据客户机的请求交换数据。我现在需要实现这个服务器的多个实例,每个实例都包含数据的一个子集,客户机仍然只连接到主服务器。实现这一点的最佳方法是什么,最好是不使用多线程?

(我同意多线程将是对高可用性和性能的一种改进,尽管它不是严格必要的。)

如果您想要这样的方案:

                          { ---> slave server 1
client ---> master server { ---> slave server 2
                          { ---> slave server 3
。。。然后,您必须向主服务器添加一个客户机API,因为它将具有双重角色:作为服务器接收来自客户机的请求,作为客户机向从属服务器发送请求

如果您已经实现了一个客户机/服务器通信协议,那么将该协议重新用于通信主/从服务器将非常有用

你还必须解决约束问题:主人如何知道有多少奴隶和哪些奴隶

  • 如果它们在同一台主机上运行,则主机本身可以启动从机
  • 如果它们在不同的主机上运行,则必须向主机提供此寻址信息:要么在主机中进行静态配置,要么让从机在每台主机启动后立即向主机发送一条地址消息(这意味着主/从协议的复杂性)
但仍然存在可用性问题:如果其中一个从属服务器关闭怎么办

  • 如果网络数据在从机之间合理分配,为了产生大量冗余数据,只要让主机逐个轮询从机,直到获得所需的所有数据,问题就会得到解决(对于corse,这仍然只适用于同时关闭的一个或两个从机;如果许多从机关闭,则无法保证维护可用数据。冗余有一个限制)
  • 如果根本没有冗余,则主机必须检测到这种情况,并做出正确反应:
    • 如果它们在同一台主机上运行,则主机可以动态地重新启动任何服务器
    • 如果它们在不同的主机上运行,则主机只能通过相应的错误消息向客户端报告问题
如果它们共享可写数据,则数据同步可能是一个问题。在这种情况下,主机将不得不向每个受影响的从机广播相同的写入操作