像 Google 这样的大型网站需要确保其服务始终可用。同时,Google 经常升级其服务器端代码。而用户甚至不会注意到这一点,他们可以照常使用 Google。
目前,当我需要更改服务器端代码(php、python 或 cgi 脚本等)时,我会关闭服务器,替换以前版本的代码,然后重新启动服务器。这种方式并不完美,用户必须等待服务器几分钟。
如何在不打扰用户的情况下悄悄升级我的服务器端代码?
答案1
基本上,最简单的方法是将多个应用服务器(至少 2 个)置于 HAProxy 等负载均衡器后面,然后进行滚动重启。基本上是这样的:
- 禁用一半服务器的流量(有关详细信息,请参阅 github 上的 haproxyctl)
- 将代码更改推送到应用服务器
- 重新启动该一半的应用程序
- 对另一半重复上述步骤
还有其他方法可以做到这一点,例如Unicorn 零停机重启,但这是最简单的并且适用于几乎所有应用程序。
以下是亚马逊关于负载平衡的一篇好文章:https://aws.amazon.com/articles/1639