我已经进行了很多搜索来弄清楚这个问题,但是我没有得到明确的解释。集群应用程序可以扩展而分叉应用程序不能扩展只是一件事?
PM2的公共站点解释说集群模式可以实现这些功能,但是没有人说出Fork模式的优点(也许可以NODE_APP_INSTANCE
变)。
我觉得Cluster可能是Fork的一部分,因为Fork似乎被广泛使用。因此,我猜想Fork从PM2的角度讲只是“分叉的过程”,而Cluster则是“可以扩展的分叉的过程”。然后,为什么要使用分叉模式?
Answers:
fork_mode
和之间的主要区别在于cluster_mode
,它命令pm2使用child_process.fork api或集群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
并让集群模块处理负载平衡。
pm2 start -i 30 app.js
并让nodejs集群完成工作。
cluster mode
主过程中是单点故障。
Node.js是单线程的。
这意味着您的Intel四核CPU中只有1个核可以执行该节点应用程序。
它称为: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
能够。这样,您还可以构建应用程序,使其在自动负载平衡的同一端口上运行。您必须通过会话,数据库等无状态构建应用程序。
cluster
内置模块child_process
内部使用?您的建议是,如果我需要灵活的功能stdio
,我必须使用Fork模式?
stdio
事情是什么pm2
“的实现。不用担心 您想cluster_mode
在生产中使用它,因为它-i [number]
在后台运行实例,因此可以强化您的实例。使用fork_mode
如淬火是没有必要或你想更好的日志之类的东西。
cluster_mode
,由于您正在运行-i [number]
进程,因此显然还会使用系统的更多资源。
cluster_mode
,负载平衡cluster_mode
,cluster_mode
使用更多的资源。)。这就是为什么我没有投票的原因。您能解释两个简单的用例吗?每个案例必须具有合理的理由才能采用其模式。