PM2中Cluster和Fork模式的区别

新手上路,请多包涵

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

PM2 的公共站点解释了集群模式可以执行 这些功能,但没有人说叉子模式的优点(也许,它可以得到 NODE_APP_INSTANCE 变量)。

我觉得 Cluster 可能是 Fork 的一部分,因为 Fork 似乎被普遍使用。所以,我猜 Fork 只是从 PM2 的角度来看的“分叉进程”,而 Cluster 意味着“能够横向扩展的分叉进程”。那么,为什么要使用 Fork 模式呢?

原文由 Jinyoung Kim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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

这在内部意味着什么?

分叉模式

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

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

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

集群模式

The cluster will only work with node as it’s exec_interpreter because it will access to the nodejs cluster module (eg: isMaster , fork 方法等)。这对于零配置流程管理非常有用,因为该流程将在多个实例中自动分叉。例如 pm2 start -i 4 server.js 将启动 4 个 server.js 实例并让集群模块处理负载平衡。

原文由 soyuka 发布,翻译遵循 CC BY-SA 3.0 许可协议

Node.js 是单线程的。

这意味着只有 1 个英特尔四核 CPU 核心可以执行节点应用程序。

它叫: fork_mode

我们将它用于 本地开发

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

自动负载平衡 无状态的请求。

同一个端口 上。

我们称之为: cluster_mode

这是为了提高 生产性能 而使用的。

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

原文由 haotang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题