如何避免服务器应用程序重启时丢包?

时间:2011-07-20 22:41:47

标签: python linux web-services tcp network-programming

服务器/ Web应用程序的典型情况是需要关闭并重新启动应用程序才能实现升级。

有哪些可能的/常见的方案(和可用的软件)可以避免在应用程序消失的短时间内丢失客户端发送到服务器的数据?

一个可行的示例方案是:对于客户端连接到端口80的简单Web服务器,而不是直接连接到Web服务器应用程序的客户端,可能会有一个简单的应用程序,它可以监听端口80和无缝转发/返回“实际”Web服务器应用程序(在某些其他端口上)的数据。当需要关闭并重新启动Web服务器时,中继应用程序可以检测到这一点并缓冲所有传入的数据,直到Web服务器恢复生命。这样,总是一个应用程序监听端口80,数据永远不会丢失(当然,在缓冲区大小和时间原因内)。是否存在这样一个简单的中间缓冲区 - 收件人不可用的软件?

我最感兴趣的是单个应用程序实例的解决方案,而不是有多个实例的解决方案(在这种情况下可以使用巧妙的滚动更新方案),但为了拥有完整的答案集,任何响应会很棒的!

1 个答案:

答案 0 :(得分:3)

要避免这种情况,请在负载均衡器后面放置多个应用程序服务器。在关闭之前,请确保负载均衡器没有向其发送新客户端。将其关闭,流量将转到其他应用程序服务器,当它恢复时,流量将开始再次发送给它。

如果您只有一台应用服务器,那么简单地“缓冲”网络流量是一个糟糕的解决方案。当服务器恢复时,它不再具有TCP状态信息,并且无论如何旧的传入连接都无处可去。