我经常搜索这个问题,但我没有得到明确的解释.群集应用程序可以扩展,分叉应用程序不能只有一个区别吗?
PM2的公共站点解释了集群模式可以做这些功能,但没有人说过Fork模式的优点(也许,它可以NODE_APP_INSTANCE
变量).
我觉得Cluster可能是Fork的一部分,因为Fork似乎一般都会被使用.因此,我认为Fork意味着从PM2开始只是'分叉过程'而Cluster意味着'分叉过程能够被扩展'.那么,我为什么要使用Fork模式?
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
执行以下操作:
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是单线程的.
这意味着只有1个Intel四核CPU核心才能执行节点应用程序.
它叫:fork_mode
.
我们将它用于本地开发.
pm2 start server.js -i 0
帮助您在CPU的每个核心上运行1个节点线程.
并自动加载平衡无状态即将到来的请求.
在同一个港口.
我们称之为:cluster_mode
.
这是为了生产性能而使用的.
如果您想对PC进行压力测试,您也可以选择在本地开发中执行此操作:)
文档和来源在这里真的很容易让人误解.
在源代码中读到这一点,唯一的区别似乎是,他们使用节点cluster
或child_process
API.因为cluster
使用后者,你实际上是在做同样的事情.有更多的自定义stdio
传递发生的客栈fork_mode
.也cluster
只能通过字符串而不是对象进行通信.
默认情况下,您正在使用fork_mode
.如果你通过了-i [number]
-option,你就会进入cluster_mode
,你通常会以w /为目标pm2
.
另外fork_mode
实例可能因为无法在同一端口上侦听EADDRINUSE
.cluster_mode
能够.这样,您还可以构建应用程序以在自动负载平衡的同一端口上运行.你必须构建没有状态的应用程序,例如session,dbs.