我可以想到很多技术来做到这一点:
- 在不同的端口和/或 IP 上设置副本 Web 服务器,然后使用 DNS 作为负载平衡器;一次重启一台服务器
- 通过隐式副本使用更显式的负载平衡(PaaS,如 Heroku 和 OpenShift)
- 使用一些内置机制(例如:在 nginx 中)
我在 IaaS 解决方案中工作,并将设置git
和一些侦听器来处理整个设置。
越简单越好,没有灵丹妙药。
对于单个服务器,优雅重启机制可能会有所帮助。它将启动新进程以接受新请求,并维护旧进程直到旧请求完成。Nginx 已经在使用它,请参阅http://wiki.nginx.org/CommandLine#Stopping_or_Restarting_Nginx
对于多台服务器,使用反向代理是一种很好的做法。一个示例结构如下所示,使用 Nginx 可以轻松构建: 如果某些后端服务器发生故障,反向代理可以将请求分发到其他健康的服务器,并且不会影响用户。您可以自定义负载均衡策略来做细粒度的控制。您还可以灵活地添加服务器进行扩展,或者选择服务器进行故障排除或代码更新。