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

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

我猜这个节点的可执行文件必须停止,所以我想我应该使用一个反向代理。 例如:

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

这是一个有效的方法吗? 如何在多台服务器上自动完成版本更新(可从同一个局域网访问)?

不同的“纯节点”解决scheme是使用内置的集群模块:

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

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

优点:

  • 堆栈中的组件更less。 (更易于部署/pipe理。)
  • 可以自动为CPU上的每个核心启动一个节点进程,以便您的程序可以充分利用底层硬件。
  • 不需要学习nginx的configuration语法

基本上,你可以(应该)做的是以下几点:

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

当您需要更新系统时,closures两个Node.js实例之一,更新它,然后重新启动它。 然后对另一个做同样的事情。

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

不足之处在于,您可能会同时在less量时间内运行不同版本的应用程序,而您的数据库(例如)需要能够赶上这一点。