如何在不断开客户端的情况下维护服务器?

如何在不断开客户端的情况下维护服务器?

我正在设计/开发新的通讯服务(就像 Yahoo、Gtalk 通讯一样)。因此,我的客户端将持续连接到服务器。我想知道在客户端仍保持连接的情况下如何维护此类服务器(应用修复、升级等)?

一种传统方法是断开客户端并关闭服务器,从而导致停机。然而,这不是理想的解决方案,因为修复和增强可能会很频繁。我几乎没见过 Yahoo、Gtalk 消息服务因维护而停机。所以我想知道他们怎么能这样做?(我相信这是设计决定)

任何想法/链接都很好。

答案1

你说得对。这是一个架构决策。这通常通过某种形式的应用程序负载平衡来实现...

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

这使得应用程序能够扩展,并具有提供冗余和使节点离线进行维护的能力。

在此处输入图片描述

答案2

在 Yahoo、Gtalk 或任何其他大规模服务中,您看不到这种情况的原因是这些服务有两个因素。1) 负载平衡或服务器池之间的循环形式。2) 集群,又称服务器池。它基本上可以分解为这个过程:删除作为活动节点的服务器,执行维护,重新添加为活动节点,转到下一个服务器,重复。虽然这种方法既耗时又昂贵,但它是在不停机的情况下完成您的要求的最(仅读)正确的方法。您可以根据服务在两台服务器之间建立一个简单的镜像,但这在任何实际规模下都会很快崩溃。虽然负载平衡不会直接有助于您的要求,但它是如何完成的主要因素,意味着您可以更有效地将工作分配给集群中的所有节点,而不是像镜像中那样由一台服务器承担所有负载。

答案3

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

其中很多只是设计理论,只有测试和研究才有效。

相关内容