如何悄悄升级/维护服务器端代码,同时保持所有服务完全可用?

如何悄悄升级/维护服务器端代码,同时保持所有服务完全可用?

像 Google 这样的大型网站需要确保其服务始终可用。同时,Google 经常升级其服务器端代码。而用户甚至不会注意到这一点,他们可以照常使用 Google。

目前,当我需要更改服务器端代码(php、python 或 cgi 脚本等)时,我会关闭服务器,替换以前版本的代码,然后重新启动服务器。这种方式并不完美,用户必须等待服务器几分钟。

如何在不打扰用户的情况下悄悄升级我的服务器端代码?

答案1

基本上,最简单的方法是将多个应用服务器(至少 2 个)置于 HAProxy 等负载均衡器后面,然后进行滚动重启。基本上是这样的:

  1. 禁用一半服务器的流量(有关详细信息,请参阅 github 上的 haproxyctl)
  2. 将代码更改推送到应用服务器
  3. 重新启动该一半的应用程序
  4. 对另一半重复上述步骤

还有其他方法可以做到这一点,例如Unicorn 零停机重启,但这是最简单的并且适用于几乎所有应用程序。

以下是亚马逊关于负载平衡的一篇好文章:https://aws.amazon.com/articles/1639

相关内容