有几个软件包可以在生产模式下更新节点js应用程序,停机时间为零(或正常重新加载),例如pm2。
但是,是否可以更新节点js本身,例如从LTS版本4.x更新到生产中的新版本6.x,停机时间为零?
答案 0 :(得分:6)
只要具有冗余,就可以使用您想要更新的任何内容来更新生产,无需停机。我们每天都在工作。
升级节点是常规,只要安装节点是部署过程的一部分,例如使用nvm
当然,您需要多台服务器。
先决条件:假设您的代码是版本1.0,在dev中升级node.js,测试您的代码,保留所需的节点版本(package.json,.nvmrc或您的安装脚本需要的任何内容)并将其添加到1.1额外检查您的服务器操作系统有节点6要求。 (例如,Centos 6无法安装节点4)
通用零停机时间滚动部署过程,假设您在服务器场中有4台服务器:
nvm install
)直接连接到它
并检查一切正常。完成。所有服务器都已升级,如果您的应用程序编码良好,客户端也没有注意到任何内容。
答案 1 :(得分:1)
要做零停机时间,您需要确保有人一直在处理用户请求,因此在您杀死旧版本的过程的那一刻,新版本必须已经绑定到具有相同应用程序的同一端口。
因此,在这种情况下零停机时间最重要的部分是负载平衡。为此,您应该在应用程序前面安装HAproxy,nginx等多个节点进程,以便您可以单独杀死并替换每个节点。
通常,为所有生产运行一个节点进程并不是一个好主意,因此如果您没有任何负载均衡器,请安装一个甚至以一些停机时间为代价。然后在其后面放置至少两个单独的服务器(或容器),并使用pm2运行您的应用程序。
此外,请注意,即使有冗余,如果您只是重新启动一个节点,您的应用程序也会中断客户端 - 例如。如果有人在发生这种情况时上传文件。
HAproxy有一个功能,您可以禁用其中一个后端,但等待所有与它的http连接以自然方式完成,而haproxy不向它发送任何新流量。这就是你确保没有用户被打断的方法。
此处配置示例:https://blog.deimos.fr/2016/01/21/zero-downtime-upgrade-with-ansible-and-haproxy/
答案 2 :(得分:1)
除了这里提到的rolling update
之外,还有一个简单的&显着的技术来更新应用程序,零停机时间,称为blue
/ green
部署。
您只需启动现有基础设施的整个副本,即blue
,然后在那里执行必要的更新。当新的blue
infra准备就绪时测试 - 切换到它的流量并使旧的green
infra空闲。
这种方式"如果出现问题"你总是有安全的选择回滚到旧的基础设施。
当您确定新的blue
在加载下正常工作时 - 只需删除旧的green
版本。
我建议采用这种方式进行复杂的操作,而不是接触现场制作。