Node.JS内置集群还是PM2集群?

leo*_*dev 16 webserver cluster-computing node.js pm2

哪个更好?

我已经与工作人员激活了Nodejs群集模式,但现在我发现PM2做了同样的事情.我正在使用keymetrics来查看我的网络服务器的统计数据,我注意到当我启动我的NodeJS节点(带有内置集群)而不使用PM2集群功能时,Keymetrics报告使用了20/30MB的Ram.

如果我停用群集(内部节点)并且我打开PM2群集,keymetrics会报告大约300MB的Ram使用情况.

现在,哪种方法更好,为什么内置集群keymetrics报告只有30MB的ram使用?

Set*_*day 9

我用 PM2。它更好的原因有很多。

  1. 与使用 core 的集群不同,您的代码几乎不需要修改即可使用 PM2。集群逻辑并不属于我们构建的每个应用程序。
  2. 它从命令行扩展。我可以pm2 scale my-app +1在部署后简单地运行以实时添加另一个工作人员。
  3. 无论如何,您应该已经在使用 PM2 来保持进程处于活动状态。所以聚类是免费的。

我无法复制与您的300MB号码相近的任何内容。事实上,我最近有一个泄漏的应用程序,我不得不使用--max-memory-restart它,即使在这种情况下,内存使用量通常保持在100MB. 尽管如果 PM2 的集群使用更多内存,我丝毫不会感到惊讶,仅仅因为它开箱即用地为您做了很多。

我的建议是不要过早地优化。使用 PM2,直到您真正需要从系统中挤出每一滴内存/性能(绝对不是在您有大量流量之前)。那时,您可以从聚类中找出您需要的最低限度,并且可以自己重新实现这些部分。

资源


Yas*_*eja 9

这实际上取决于您的 Node 应用程序的工作方式。如果您的应用程序是无状态的,那么使用 pm2 集群模式很容易,因为它不需要在代码更改方面付出太多努力(或根本不需要努力)。但是如果您的应用程序使用本地数据、会话或使用套接字,那么建议使用 Node.js 内置集群模块并使用 pm2 正常启动您的应用程序。

我的 Node 应用程序正在使用套接字和 MQTT,所以我不能直接使用 pm2 集群模式 ( pm2 start app.js -i max),因为同一个节点应用程序将在每个 CPU 上运行,并且它正在与客户端创建多个套接字连接。因此,我必须使用 Node 集群手动管理集群和工作线程,并且必须使用粘性会话socket.io-redis 之类的节点包来设置所有工作线程之间的正确通信流。然后简单地启动我的节点应用程序pm2 start app.js

下面是一些可能有帮助的链接。

  • 你不能使用像 redis 这样的东西来存储你的套接字会话,然后只使用 pm2 吗? (2认同)