start cluster node.js pm2

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 :)