[英]Node.JS built in cluster or PM2 clustering?
哪一个更好?
我已经用工人激活了 Nodejs 集群模式,但现在我发现 PM2 做了同样的事情。 我正在使用 keymetrics 查看来自我的网络服务器的统计信息,我注意到当我启动我的 NodeJS 节点(带有内置集群)而不使用 PM2 集群功能时,Keymetrics 报告使用了 20/30MB 的 Ram。
如果我停用集群(节点内部)并打开 PM2 集群,keymetrics 会报告大约 300MB 的 Ram 使用量。
现在,哪种方法更好,为什么内置集群 keymetrics 仅报告 30MB 的内存使用量?
我用 PM2。 它更好的原因有很多。
pm2 scale my-app +1
以在部署后实时添加另一个工作人员。 我无法复制接近您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.