繁体   English   中英

PM2中的群集和前叉模式差异

[英]Cluster and Fork mode difference in PM2

我已经进行了很多搜索来弄清楚这个问题,但是我没有得到明确的解释。 集群应用程序可以扩展而分叉应用程序不能扩展只是一件事?

PM2的公共站点解释说集群模式可以实现这些功能,但没有人说出Fork模式的优点(也许可以获取NODE_APP_INSTANCE变量)。

我觉得Cluster可能是Fork的一部分,因为Fork似乎被广泛使用。 因此,我猜想Fork从PM2的角度讲只是“分叉的过程”,而Cluster则是“能够扩展的分叉的过程”。 然后,为什么要使用分叉模式?

fork_modecluster_mode之间的主要区别在于,它命令pm2使用child_process.fork api或集群 api。

这在内部意味着什么?

货叉模式

fork模式作为基本过程生成。 这允许更改exec_interpreter ,以便您可以使用exec_interpreter运行phppython服务器。 是的, exec_interpreter是用于启动子进程的“命令”。 默认情况下,pm2将使用node以便pm2 start server.js将执行以下操作:

require('child_process').spawn('node', ['server.js'])

此模式非常有用,因为它有很多可能性。 例如,您可以在预先建立的端口上启动多个服务器,然后由HAProxy或Nginx进行负载均衡。

集群模式

cluster只能与node因为它是exec_interpreter因为它将访问nodejs集群模块(例如: isMasterfork方法等)。 这对于零配置流程管理非常有用,因为该流程将在多个实例中自动分叉。 例如pm2 start -i 4 server.js将推出的4个实例server.js ,让簇模块处理负载平衡。

Node.js是单线程的。

这意味着您的Intel四核CPU中只有1个核可以执行该节点应用程序。

它称为: fork_mode

我们将其用于本地开发人员

pm2 start server.js -i 0帮助您在CPU的每个内核上运行1个节点线程。

自动平衡即将到来的无状态请求。

同一端口上

我们称之为: cluster_mode

出于生产上的考虑而使用。

如果您想对PC进行压力测试,也可以选择在本地开发人员上执行此操作:)

文档和资源在这里确实令人误解。

阅读源代码中的内容,唯一的区别似乎是它们使用节点clusterchild_process API。 由于cluster使用后者,因此您实际上在做同样的事情。 客栈fork_mode发生了很多自定义stdio传递。 此外, cluster只能通过字符串进行通信,而不能通过对象进行通信。

默认情况下,您使用fork_mode 如果传递-i [number] ,那么您将进入cluster_mode ,通常目标是w / pm2

另外, fork_mode实例可能无法在同一端口上EADDRINUSE cluster_mode可以。 这样,您还可以构建应用程序以使其在自动负载平衡的同一端口上运行。 您必须通过会话,数据库等无状态构建应用程序。

暂无
暂无

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

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