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

标签 python linux web-services tcp network-programming

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

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

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

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

最佳答案

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

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

关于python - 如何避免服务器应用程序重启时丢包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769405/

相关文章:

python - 如何在 Pandas 中合并 "(df1 & not df2)"数据帧?

linux - 如何在 Stata for Linux 命令行中执行多行选择?

linux - 模拟 TextMate 空格和制表符功能的 Gedit 插件

java - jmeter中soap web服务的xpath断言

java - 如何使用 Java、Maven 和 Spring 创建和测试 SOAP 和 HTTP Web 服务

java - 从 JAX-RS 中排除提供者

python - pymc 中的标准化贝叶斯 IRT 模型

python - 在元组中制作斐波那契数

python - 共享模块变量没有更新?

linux - 具有动态文件名的 Linux 文件的回显结果