我已经搜索了很多来弄清楚这个问题,但我没有得到明确的解释。集群应用程序可以横向扩展而分叉应用程序不能只有一个区别吗?
PM2 的公共站点解释了集群模式可以执行 这些功能,但没有人说叉子模式的优点(也许,它可以得到 NODE_APP_INSTANCE
变量)。
我觉得 Cluster 可能是 Fork 的一部分,因为 Fork 似乎被普遍使用。所以,我猜 Fork 只是从 PM2 的角度来看的“分叉进程”,而 Cluster 意味着“能够横向扩展的分叉进程”。那么,为什么要使用 Fork 模式呢?
原文由 Jinyoung Kim 发布,翻译遵循 CC BY-SA 4.0 许可协议
fork_mode
和cluster_mode
之间的主要区别在于它命令 pm2 使用 child_process.fork api 或 cluster api。这在内部意味着什么?
分叉模式
以
fork
模式作为基本进程产卵。这允许更改exec_interpreter
,以便您可以使用 pm2 运行php
或python
服务器。是的,exec_interpreter
是用于启动子进程的“命令”。默认情况下,pm2 将使用node
这样pm2 start server.js
会执行以下操作:这种模式非常有用,因为它提供了很多可能性。例如,您可以在预先建立的端口上启动多个服务器,然后由 HAProxy 或 Nginx 进行负载平衡。
集群模式
The
cluster
will only work withnode
as it’sexec_interpreter
because it will access to the nodejs cluster module (eg:isMaster
,fork
方法等)。这对于零配置流程管理非常有用,因为该流程将在多个实例中自动分叉。例如pm2 start -i 4 server.js
将启动 4 个server.js
实例并让集群模块处理负载平衡。