5

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

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

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

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

4

2 回答 2

10

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

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

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

优点:

  • 堆栈中的组件更少。(更易于部署/管理。)
  • 可以为 CPU 上的每个核心自动启动一个节点进程,因此您的程序可以充分利用底层硬件。
  • 无需学习 nginx 的配置语法
于 2012-11-13T12:43:45.593 回答
7

基本上,您可以(应该)做的事情如下:

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

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

基本上,这应该做到。

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

于 2012-11-13T10:11:06.173 回答