PM2中的簇和叉模式差异

我已经搜寻了很多想知道这个问题,但我没有得到明确的解释。 是否只有一个区别的事情,聚集的应用程序可以扩大和分叉应用程序不能?

PM2的公共站点解释集群模式可以做这些function,但没有人说Fork模式的优点(也许它可以得到NODE_APP_INSTANCEvariables)。

我觉得Cluster可能是Fork的一部分,因为Fork似乎被普遍使用。 所以,我认为Fork意味着从PM2的angular度来说就是“分叉的过程”,而Cluster则意味着“能够被扩展的分叉过程”。 那么,为什么我应该使用叉模式?

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

这是什么意思呢?

叉子模式

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

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

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

集群模式

因为它将访问nodejs集群模块(例如: isMasterfork方法等),所以cluster只能用于exec_interpreter node 。 这对零configurationstream程pipe理非常有用,因为stream程将在多个实例中自动分叉。 例如, pm2 start -i 4 server.js将启动4 pm2 start -i 4 server.js实例,并让集群模块处理负载平衡。

Node.js是单线程的。

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

它叫: fork_mode

我们把它用于本地开发

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

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

同一个端口上

我们称之为: cluster_mode

这是用于生产性能的缘故。

或在本地开发事件。

如果你想压力testing你的电脑:)

文档和来源在这里真的是误导。

在源代码中读到这一点,唯一的区别似乎是,它们使用节点clusterchild_process API。 由于cluster使用后者,你实际上也是这样做的。 在客栈fork_mode周围传递了更多的自定义stdio 。 此外, cluster只能通过string而不是对象进行通信。

默认情况下你正在使用fork_mode 。 如果你传递了-i [number] ,你将进入cluster_mode ,你通常以w / pm2为目标。

此外, fork_mode实例可能无法在相同的端口上EADDRINUSEcluster_mode可以。 这样你也可以构build你的应用程序在同一个端口上自动运行负载均衡。 你必须build立应用程序没有状态,然后通过例如会话,DBS。