哪个更好?
我已经与工作人员激活了Nodejs群集模式,但现在我发现PM2做同样的事情。 我正在使用keymetrics来查看我的网络服务器的统计数据,我注意到当我启动我的NodeJS节点(带有内置集群)而不使用PM2集群功能时,Keymetrics报告使用了20 / 30MB的Ram。
如果我停用群集(内部节点)并且我打开PM2群集,keymetrics会报告大约300MB的Ram使用情况。
现在,哪种方法更好,为什么内置群集keymetrics报告只有30MB内存使用?
答案 0 :(得分:3)
我使用PM2。有很多原因会更好。
pm2 scale my-app +1
以在部署后实时添加另一个工作程序。我无法重现与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-sessions和socket.io-redis来设置所有worker之间的正确通信流。然后使用pm2 start app.js
下面是一些可能有用的链接。