如何维护服务器而不断开客户端?

我正在devise/开发新的信使服务(就像雅虎,Gtalk使者)。 所以,我的客户将不断连接到服务器。 我想知道在客户端连接的情况下,如何维护这些服务器(应用修补程序,升级等)?

一种传统的方法是断开客户端连接并closures服务器,导致停机。 但是,这不是理想的解决scheme,因为修复,增强可能会频繁。 我几乎没有看到雅虎,Gtalk Messenger服务正在维护。 所以我想知道他们怎么能做到这一点? (我相信这是devise决定)

任何想法/链接将是伟大的。

你是对的。 这是一个架构决定。 这通常是通过某种forms的应用程序负载平衡来完成的。

您的客户端不应该直接连接到服务器,而应该是一个负载均衡器 ,负责根据相关标准做出将客户端stream量引导到后端服务器的路由决策; 循环,谁是最不忙的,谁在线/离线等。

这就允许应用程序进行扩展,同时提供冗余function和使节点脱机进行维护的function。

在这里输入图像说明

你没有看到雅虎,Gtalk或者其他大规模服务的原因是这些服务有两个因素。 1)负载平衡或在服务器池中循环的一种forms。 2)集群,即所谓的服务器池。 它基本上分解为这个过程:删除服务器作为一个活动节点,执行您的维护,加回作为活动,移动到下一个服务器,重复。 虽然这种方法既费时又费钱,但是这是最正确的方法,可以在没有停机的情况下完成所要求的工作。 你可以在两台服务器之间有一个简单的镜像,这取决于服务,但是在任何真实的规模下,这个镜像都会很快崩溃。 虽然负载均衡并不直接影响您的要求,但它是如何实现的主要因素,并且意味着您可以更有效地将工作分配给群集中的所有节点,而不是一个服务器承担所有负载,如镜子。

您可能没有注意到它们,但大多数情况下,它们使用所谓的“热故障转移”,其中有一组机器以循环方式处理请求。 当一台机器需要closures服务时,他们会把它从服务器池中取出并closures。 受影响的客户基本上会立即连接到下一个可用的服务器。 客户端可能被编程为根据服务器本身的请求自动更换服务器。

很多这只是devise理论,只是testing和研究将起作用。