我搜索了很多搞清楚这个问题,但我没有得到明确的解释。是否只有一个群集的应用程序可以向外扩展和分叉的应用程序无法区别嘛?
PM2的公共网站上介绍集群模式可以做these feature但没有人说,大约叉模式(也许,它可以得到NODE_APP_INSTANCE
变量)的利弊。
我觉得像群集,因为叉好像一般的使用可能是叉的一部分。所以,我想叉从PM2的点意味着只是“派生进程”和集群的意思是“分叉过程,是能够进行扩展”。那么,我为什么要使用叉子模式?
fork_mode
和cluster_mode
之间的主要区别在于,它的订单PM2为使用的child_process.fork API或cluster API。
就拿fork
模式作为基本过程产卵。这允许改变exec_interpreter
,这样就可以运行php
或PM2一个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
将推出server.js
的4个实例,并让群集模块手柄负载平衡。
Node.js的是单线程。
这意味着只有1英特尔四核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]
选项,你会进入cluster_mode
,你通常瞄准W / pm2
。
此外fork_mode
实例可能不能在同一端口上侦听由于EADDRINUSE
。 cluster_mode
可以。这样,您还可以构建您应用在同一个端口是自动加载运行的平衡。你必须建立一个没有状态的应用程序,然后虽然如会话,DBS。