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

时间:2015-11-29 10:19:25

标签: node.js webserver cluster-computing pm2

哪个更好?

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

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

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

2 个答案:

答案 0 :(得分:3)

我使用PM2。有很多原因会更好。

  1. 与使用核心群集不同,您的代码几乎不需要修改即可使用PM2。集群逻辑并不属于我们构建的每个应用程序。
  2. 它从命令行扩展。我可以简单地运行pm2 scale my-app +1以在部署后实时添加另一个工作程序。
  3. 你应该已经在使用PM2来保持这个过程的活力。所以群集是免费的。
  4. 我无法重现与300MB号码相近的任何内容。事实上,我最近有一个漏洞的应用程序,我不得不使用--max-memory-restart,甚至在那种情况下,内存使用率通常低于100MB。虽然如果PM2的聚类使用更多内存,但丝毫不会让我感到惊讶,只是因为它为您开箱即用。

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

    资源

答案 1 :(得分:2)

这实际上取决于Node应用程序的工作方式。如果您是application is stateless,那么使用pm2集群模式很容易,因为它不需要太多的代码更改工作。但是,如果您的应用程序使用本地数据,会话或套接字,则建议使用Node.js内置集群模块,并通常使用pm2启动应用程序。

我的Node应用程序正在使用套接字和MQTT,因此我不能直接使用pm2集群模式(pm2 start app.js -i max),因为同一节点应用程序将在每个CPU上运行,并且正在与客户端创建多个套接字连接。因此,我必须使用Node cluster手动管理Clusters和Workers,并且必须像节点软件包一样使用sticky-sessionssocket.io-redis来设置所有worker之间的正确通信流。然后使用pm2 start app.js

来启动我的节点应用程序

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