[英]Cluster and Fork mode difference in PM2
我已经进行了很多搜索来弄清楚这个问题,但是我没有得到明确的解释。 集群应用程序可以扩展而分叉应用程序不能扩展只是一件事?
PM2的公共站点解释说集群模式可以实现这些功能,但没有人说出Fork模式的优点(也许可以获取NODE_APP_INSTANCE
变量)。
我觉得Cluster可能是Fork的一部分,因为Fork似乎被广泛使用。 因此,我猜想Fork从PM2的角度讲只是“分叉的过程”,而Cluster则是“能够扩展的分叉的过程”。 然后,为什么要使用分叉模式?
fork_mode
和cluster_mode
之间的主要区别在于,它命令pm2使用child_process.fork api或集群 api。
将fork
模式作为基本过程生成。 这允许更改exec_interpreter
,以便您可以使用exec_interpreter
运行php
或python
服务器。 是的, exec_interpreter
是用于启动子进程的“命令”。 默认情况下,pm2将使用node
以便pm2 start server.js
将执行以下操作:
require('child_process').spawn('node', ['server.js'])
此模式非常有用,因为它有很多可能性。 例如,您可以在预先建立的端口上启动多个服务器,然后由HAProxy或Nginx进行负载均衡。
cluster
只能与node
因为它是exec_interpreter
因为它将访问nodejs集群模块(例如: isMaster
, fork
方法等)。 这对于零配置流程管理非常有用,因为该流程将在多个实例中自动分叉。 例如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进行压力测试,也可以选择在本地开发人员上执行此操作:)
文档和资源在这里确实令人误解。
阅读源代码中的内容,唯一的区别似乎是它们使用节点cluster
或child_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.