如何更新正在运行的Node.js服务器?

kol*_*kol 5 versioning reverse-proxy node.js

据我所知,Node.js服务器基本上是一个JavaScript文件,由node可执行文件运行.是否可以在不停止请求处理的情况下更新此文件?

我想必须为此停止节点可执行文件,所以我想我应该使用反向代理.例如:

  1. 原始服务器版本侦听localhost:50001
  2. 代理服务器侦听webinterface上的请求:80并将它们转发到localhost:50001
  3. 应在localhost:50002上启动新的服务器版本
  4. 代理服务器转发目标应更改为localhost:50002
  5. 应停止原始服务器版本

这是一种有效的方法吗?如何在多台服务器计算机上自动完成此类版本更新(可从同一LAN访问)?

rdr*_*rey 10

一个不同的"纯节点"解决方案是使用内置的集群模块:

您的代码作为一个集群客户端运行(许多).集群服务器进程绑定到端口,并在客户端之间进行自动负载平衡.更改代码后,您可以向群集服务器发送信号,它将正常地重新启动客户端,而不会丢弃任何现有连接.

以下是一些可以为您执行集群服务器管理的项目:

好处:

  • 堆栈中的组件更少.(更易于部署/管理.)
  • 可以为CPU上的每个核心自动启动节点进程,因此您的程序可以充分利用底层硬件.
  • 无需学习nginx的配置语法


Gol*_*den 5

基本上,您可以(应该)做的是以下内容:

  • 运行Nginx等Web服务器作为反向代理
  • 在其后面至少使用两个(!)Node.js实例
  • 将会话放在Redis等数据库中

当您需要更新系统时,请关闭其中一个Node.js实例,更新它并重新启动它.然后对另一个做同样的事情.

基本上,这应该做到这一点.

缺点是您可能会在很短的时间内同时运行不同版本的应用程序,并且您的数据库(例如)需要能够赶上这一点.