最近一段时间在做 Eggjs 相关的项目,关于单机部署有一些疑问:
该如何做到服务不中断更新呢?
最原始的更新方式是: 代码更新、服务重启,这段时间用户服务是中断的体验不好。 我想到的优化方案是: Nginx 在前边做一层负载,服务器下做启动两个服务端口分别是 9000 和 9001, 部署的时候, Nginx 去掉 9000 的负载,重启 Nginx;9000 端口停止服务,代码更新,重启 Eggjs; Nginx 加上 9000 的负载,关闭 9001 的负载;9001 端口停止服务,代码更新,重启 Eggjs; Nginx 加上 9001 的负载,重启 Nginx; 更新完成。
这样操作有两个问题:一是操作极其繁琐,二是 Eggjs 服务器里有初始化和定时任务,如果做负载的话,代码上还要做区分,感觉还是不够优雅。 诸位有什么比较优雅的解决方式吗?