繁体   English   中英

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

[英]Node.JS built in cluster or PM2 clustering?

哪一个更好?

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

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

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

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

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

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

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

资源

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM