node.js - start - Diferencia de modo Cluster y Fork en PM2
pm2 cluster (3)
La documentación y las fuentes son realmente engañosas aquí.
Al leer esto en las fuentes, las únicas diferencias parecen ser que usan
cluster
nodos o API
child_process
.
Como el
cluster
usa lo último, en realidad estás haciendo lo mismo.
Hay muchas más cosas personalizadas que pasan por
fork_mode
.
Además, el
cluster
solo se puede comunicar a través de cadenas, no de objetos.
Por defecto está utilizando
fork_mode
.
Si pasa la
-i [number]
,
cluster_mode
en
cluster_mode
, que generalmente apunta a w /
pm2
.
Además, la instancia
fork_mode
probablemente no puede escuchar en el mismo puerto debido a
EADDRINUSE
.
cluster_mode
can.
De esta manera, también puede estructurar su aplicación para que se ejecute en el mismo puerto con carga equilibrada automáticamente.
Tienes que construir aplicaciones sin estado entonces, por ejemplo, sesiones, dbs.
He buscado mucho para resolver esta pregunta, pero no obtuve una explicación clara. ¿Hay solo una cosa diferente de que la aplicación en clúster se puede escalar y la aplicación bifurcada no se puede?
El sitio público de PM2 explica que el modo Cluster puede hacer
estas funciones,
pero nadie dice acerca de los profesionales del modo Fork (tal vez, puede obtener la variable
NODE_APP_INSTANCE
).
Siento que Cluster podría ser parte de Fork porque Fork parece ser usado en general. Entonces, supongo que Fork significa "proceso bifurcado" desde el punto de vista de PM2 y Cluster significa "proceso bifurcado que se puede escalar". Entonces, ¿por qué debería usar el modo de horquilla?
La principal diferencia entre
fork_mode
y
fork_mode
es que ordena que pm2 use la api
child_process.fork
o la api de
cluster
.
¿Qué significa esto internamente?
Modo tenedor
Tome el modo
fork
como un proceso básico de desove.
Esto permite cambiar el
exec_interpreter
, para que pueda ejecutar un servidor
php
o
python
con pm2.
Sí, el
exec_interpreter
es el "comando" utilizado para iniciar el proceso secundario.
De manera predeterminada, pm2 usará el
node
para que
pm2 start server.js
hará algo como:
require(''child_process'').spawn(''node'', [''server.js''])
Este modo es muy útil porque permite muchas posibilidades. Por ejemplo, puede iniciar múltiples servidores en puertos preestablecidos que luego serán balanceados por HAProxy o Nginx.
Modo de clúster
El
cluster
solo funcionará con el
node
ya que es
exec_interpreter
porque accederá al módulo del clúster de nodejs (por ejemplo:
isMaster
, métodos de
fork
, etc.).
Esto es excelente para la gestión de procesos de configuración cero porque el proceso se bifurcará automáticamente en varias instancias.
Por ejemplo,
pm2 start -i 4 server.js
lanzará 4 instancias de
server.js
y permitirá que el módulo del clúster maneje el equilibrio de carga.
Node.js es de un solo hilo.
Eso significa que solo 1 núcleo de su CPU Intel de cuatro núcleos puede ejecutar la aplicación de nodo.
Se llamaba:
fork_mode
.
Lo usamos para desarrolladores locales .
pm2 start server.js -i 0
ayuda a ejecutar 1 subproceso de nodo en cada núcleo de su CPU.
Y auto-equilibre la carga de las próximas solicitudes sin estado.
En el mismo puerto .
Lo llamamos:
cluster_mode
.
Que se utiliza por el rendimiento en la producción .
También puede optar por hacer esto en el desarrollo local si desea hacer una prueba de esfuerzo en su PC :)