【问题标题】:Scalability issues in NodeJS serverNodeJS 服务器中的可扩展性问题
【发布时间】:2017-06-17 06:11:45
【问题描述】:

我们正在运行基于 NodeJS express 的服务器来处理来自基于 Particle Photon 的设备的传入请求。服务器和设备之间的通信是加密的,我们在 NodeJS 中使用解密库。我们在 4 核 8GB 机器上运行服务器,使用 NodeJS v0.10.25,目前每秒接收 220 个请求(每个请求大约 1kB 数据)。我们也使用 PM2 进行负载平衡。对于收到的每个请求,我们都会发出一个事件来处理它(进入 NodeJS 的单个事件队列?)

但似乎带有 PM2 的 NodeJS 无法处理这种负载。它可以工作一段时间,但无法及时处理所有事件。在积累了大量未决请求后,它会停止任何传入的数据包并继续处理它已排队的数据/事件。

  1. NodeJS 服务器是否存在可扩展性问题? NodeJS 不适合这么重的负载吗?是不是因为使用了非常旧的 NodeJS 版本(由于依赖关系,我们对升级有点偏执)? 另外,
  2. 负载平衡 NodeJS 的最佳工具是什么(我们能否使用 PM2 以外的工具获得更好的性能)?
  3. 我们可以使用什么机制(库、代码或工具)来分析有关 NodeJS v8 引擎的统计信息。特别是,我们需要有关 V8 引擎下的事件循环数(我认为只有 1 个)以及事件循环中在任何时间点未决的事件的数量/性质的更多信息。
  4. 如果事件循环队列过载,这是 NoseJS 与套接字断开连接并暂停传入请求的已知问题吗?有没有办法配置这种行为?

提前非常感谢

【问题讨论】:

    标签: node.js sockets scalability


    【解决方案1】:

    似乎使用最新的稳定 NodeJS 版本(4.3.2)解决了这个问题。

    【讨论】:

    • 为了您的兴趣,最新的 LTS 版本是 6.9.5。使用最新的 LTS 可能会更好。 4.3.2 版于 2016 年 3 月 3 日发布,因此已经过时,可能包含安全漏洞。