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

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

现在,当我需要更改服务器端代码(php,python或cgi脚本等)时,我将closures服务器,replace以前的版本代码,然后重新启动服务器。 这种方式并不完美,用户将不得不等待服务器分钟。

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

基本上最简单的方法是在HAProxy之类的负载均衡器之后安装多个应用程序服务器(至less2个),然后执行滚动重新启动。 所以基本如此:

  1. 禁用一半的服务器的stream量(详情请参阅github上的haproxyctl)
  2. 将您的代码更改推送到应用程序服务器
  3. 重新启动应用程序的一半
  4. 重复另一半

还有其他方法可以做到这一点,比如在Unicorn中重新启动零宕机 ,但这是最简单的,几乎适用于所有应用程序。

以下是来自Amazon的一篇关于loadbalancing的文章: https : //aws.amazon.com/articles/1639