Luego de buscar en varios repositorios y sitios al terminar hemos dado con la solución que te enseñaremos pronto.
Solución:
La principal diferencia entre fork_mode
y cluster_mode
es que ordena a pm2 que use la API child_process.fork o la API del clúster.
¿Qué significa esto internamente?
modo bifurcación
toma el fork
Modo de desove como proceso básico. Esto permite cambiar la exec_interpreter
para que pueda ejecutar un php
o un python
servidor con pm2. Sí el exec_interpreter
es el “comando” utilizado para iniciar el proceso secundario. Por defecto, pm2 usará node
así que eso 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, podría lanzar varios servidores en puertos preestablecidos que luego serán balanceados por HAProxy o Nginx.
Modo de clúster
Él cluster
solo funcionará con node
como su exec_interpreter
porque accederá al módulo de clúster de nodejs (por ejemplo: isMaster
, fork
métodos, etc). Esto es excelente para la administración de procesos de configuración cero porque el proceso se bifurcará automáticamente en múltiples instancias. Por ejemplo pm2 start -i 4 server.js
lanzará 4 instancias de server.js
y deje que el módulo de 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.
Llamó: fork_mode
.
lo usamos para desarrollador local.
pm2 start server.js -i 0
lo ayuda a ejecutar 1 subproceso de nodo en cada núcleo de su CPU.
Y equilibrio de carga automático las solicitudes de los apátridas que vienen.
Sobre el mismo puerto.
Lo llamamos: cluster_mode
.
Que se usa en aras de desempeño en producción.
También puede optar por hacer esto en un desarrollador local si desea realizar una prueba de estrés en su PC 🙂
La documentación y las fuentes son realmente engañosas aquí.
Al leer sobre esto en las fuentes, las únicas diferencias parecen ser que usan cualquiera de los nodos cluster
o child_process
API. Ya que cluster
usa este último, en realidad estás haciendo lo mismo. Hay mucho más personalizado stdio
pasando alrededor pasando posada fork_mode
. También cluster
solo se puede comunicar a través de cadenas, no de objetos.
Por defecto estás usando fork_mode
. Si pasas el -i [number]
-opción, vas a entrar cluster_mode
que generalmente buscas con pm2
.
También fork_mode
la instancia probablemente no pueda escuchar en el mismo puerto debido a EADDRINUSE
. cluster_mode
puede. De esta manera, también puede estructurar su aplicación para que se ejecute en el mismo puerto y se equilibre automáticamente la carga. Debe crear aplicaciones sin estado, por ejemplo, sesiones, dbs.
Puntuaciones y reseñas
Si estás de acuerdo, eres capaz de dejar una sección acerca de qué le añadirías a este post.