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

时间:2012-11-13 08:39:31

标签: node.js versioning reverse-proxy

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

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

  1. 原始服务器版本侦听localhost:50001
  2. 代理服务器侦听webinterface上的请求:80并将它们转发到localhost:50001
  3. 应在localhost:50002
  4. 上启动新服务器版本
  5. 代理服务器转发目标应更改为localhost:50002
  6. 应停止原始服务器版本
  7. 这是一种有效的方法吗?如何在多台服务器计算机上自动完成此类版本更新(可从同一LAN访问)?

2 个答案:

答案 0 :(得分:10)

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

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

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

优点:

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

答案 1 :(得分:5)

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

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

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

基本上,这应该这样做。

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