当前位置:  开发笔记 > 编程语言 > 正文

PM2中的Cluster和Fork模式差异

如何解决《PM2中的Cluster和Fork模式差异》经验,为你挑选了3个好方法。

我经常搜索这个问题,但我没有得到明确的解释.群集应用程序可以扩展,分叉应用程序不能只有一个区别吗?

PM2的公共站点解释了集群模式可以做这些功能,但没有人说过Fork模式的优点(也许,它可以NODE_APP_INSTANCE变量).

我觉得Cluster可能是Fork的一部分,因为Fork似乎一般都会被使用.因此,我认为Fork意味着从PM2开始只是'分叉过程'而Cluster意味着'分叉过程能够被扩展'.那么,我为什么要使用Fork模式?



1> soyuka..:

fork_mode和之间的主要区别在于cluster_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进行负载平衡.

群集模式

cluster将只与工作node,因为它是exec_interpreter因为它会进入到集群的NodeJS模块(例如:isMaster,fork方法等).这非常适合零配置流程管理,因为该流程将自动分叉到多个实例中.例如,pm2 start -i 4 server.js将启动4个实例server.js并让集群模块处理负载平衡.


注意:在"集群模式"中,主进程是单点故障.
根据您在此处的答案提出的问题:我有一个用例,例如需要生成30个node.js应用实例,并带有唯一的预定义端口号(:3000至:3030),并让每个实例处理一个特定用户组,这些用户将仅在其分配的端口上进行访问。因此,我不希望Master进程执行负载平衡,而是只启动(并继续运行)子进程。这可能吗?还是仅尝试将负载分散到所有产生的子进程中?
我将使用pm2编程API在fork_mode中启动30个进程,并在30个端口之间使用其他东西作为负载平衡器。您还可以使用`pm2 start -i 30 app.js`并让nodejs集群完成工作。

2> haotang..:

Node.js是单线程的.

这意味着只有1个Intel四核CPU核心才能执行节点应用程序.

它叫:fork_mode.

我们将它用于本地开发.

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

自动加载平衡无状态即将到来的请求.

同一个港口.

我们称之为:cluster_mode.

这是为了生产性能而使用的.

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


thaks,它清除了很多关于nodejs的东西

3> eljefedelrod..:

文档和来源在这里真的很容易让人误解.

在源代码中读到这一点,唯一的区别似乎是,他们使用节点clusterchild_processAPI.因为cluster使用后者,你实际上是在做同样的事情.有更多的自定义stdio传递发生的客栈fork_mode.也cluster只能通过字符串而不是对象进行通信.

默认情况下,您正在使用fork_mode.如果你通过了-i [number]-option,你就会进入cluster_mode,你通常会以w /为目标pm2.

另外fork_mode实例可能因为无法在同一端口上侦听EADDRINUSE.cluster_mode能够.这样,您还可以构建应用程序以在自动负载平衡的同一端口上运行.你必须构建没有状态的应用程序,例如session,dbs.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有