【发布时间】:2011-07-20 22:41:47
【问题描述】:
服务器/Web 应用程序的典型情况是应用程序需要关闭并重新启动以实施升级。
有哪些可能/常见的方案(和可用软件)来避免在应用程序消失的短时间内丢失客户端发送到服务器的数据?
一个可行的示例方案是:对于客户端连接到端口 80 的简单 Web 服务器,而不是客户端直接连接到 Web 服务器应用程序,可以在两者之间有一个简单的应用程序侦听端口 80 和无缝地向/从“实际”Web 服务器应用程序(在某个其他端口上)转发/返回数据。当网络服务器需要关闭并重新启动时,中继应用程序可以检测到这一点并缓冲所有传入的数据,直到网络服务器恢复运行。这样,总是有一个应用程序监听端口 80,并且数据永远不会丢失(当然,在缓冲区大小和时间原因内)。这种简单的中间缓冲区接收者不可用的软件是否已经存在?
我最感兴趣的是针对单个应用程序实例的解决方案,而不是有多个实例的解决方案(在这种情况下,可以使用巧妙的滚动更新方案),但为了获得完整的答案集,任何响应会很棒!
【问题讨论】:
-
那么当托管“中间”应用程序的服务器出现故障时会发生什么?
-
@Michael Kent - 举个例子,服务显然会宕机。但是,具有缓冲功能的中继应用程序将是一心一意的,不需要更新即可将其关闭,或者至少比主应用程序少得多。崩溃是另一回事......我只对已知/计划的更新/维护感兴趣。
-
然后,您的“中间”应用程序(在目标应用程序关闭时将其输入排队)是一个候选解决方案。不过,您可能想在重新发明轮子之前环顾四周。我相信 RabbitMQ 经常用于此目的,但可能有点矫枉过正。
标签: python linux web-services tcp network-programming