J'ai beaucoup cherché pour comprendre cette question, mais je n'ai pas obtenu d'explication claire. Existe-t-il une seule différence entre une application en cluster qui peut être mise à l'échelle et une application fourchue?
Le site public de PM2 explique que le mode Cluster peut faire ces fonctionnalités, mais personne ne parle des avantages du mode Fork (peut-être qu'il peut devenir NODE_APP_INSTANCE
variable).
J'ai l'impression que Cluster pourrait faire partie de Fork parce que Fork semble être utilisé en général. Donc, je suppose que Fork signifie simplement «processus fourchu» du point de PM2 et Cluster signifie «processus fourchu qui peut être mis à l'échelle». Alors, pourquoi devrais-je utiliser le mode Fork?
pm2 start -i 30 app.js
et laisser le cluster nodejs faire le travail.cluster mode
le processus maître est un point de défaillance unique.Node.js est monothread.
Cela signifie qu'un seul cœur de votre processeur Intel quad-core peut exécuter l'application de nœud.
Il a appelé:
fork_mode
.Nous l'utilisons pour le développement local .
pm2 start server.js -i 0
vous aide à exécuter 1 thread de nœud sur chaque cœur de votre CPU.Et équilibrez automatiquement la charge des demandes à venir sans état.
Sur le même port .
Nous l' appelons:
cluster_mode
.Qui est utilisé dans un souci de performance en production .
Vous pouvez également choisir de le faire sur le développement local si vous souhaitez tester votre PC :)
la source
La documentation et les sources sont vraiment trompeuses ici.
En lisant à ce sujet dans les sources, les seules différences semblent être qu'elles utilisent soit le nœud,
cluster
soit l'child_process
API. Depuiscluster
utilise ce dernier, vous faites en fait de même. Il y a juste beaucoup plus de coutume quistdio
passe autour de l'aubergefork_mode
.cluster
Ne peut également être communiqué que via des chaînes, pas des objets.Par défaut, vous utilisez
fork_mode
. Si vous passez l'-i [number]
option-, vous entrez danscluster_mode
, que vous visez généralement w /pm2
.De plus, l'
fork_mode
instance ne peut probablement pas écouter sur le même port à cause deEADDRINUSE
.cluster_mode
pouvez. De cette façon, vous pouvez également structurer votre application pour qu'elle s'exécute sur le même port en équilibrant automatiquement la charge. Vous devez alors créer des applications sans état, par exemple des sessions, des dbs.la source
cluster
module intégré utilise enchild_process
interne? et votre suggestion est que si j'ai besoin de flexibilitéstdio
, je dois utiliser le mode Fork?stdio
chose est quelque chose depm2
la mise en œuvre de. Ne t'inquiète pas pour ça. Vous souhaitez l'utilisercluster_mode
en production, car cela renforce votre instance car elle exécute des-i [number]
instances en arrière-plan. À utiliserfork_mode
si le durcissement n'est pas nécessaire ou si vous voulez de meilleurs journaux et autres.cluster_mode
Utilise également évidemment plus de ressources de votre système car vous exécutez des-i [number]
processus.cluster_mode
, l'équilibrage de la chargecluster_mode
,cluster_mode
utilise plus de ressources ..). C'est la raison pour laquelle je n'ai pas voté. Pourriez-vous expliquer les deux cas d'utilisation simples? Chaque cas doit être raisonnable pourquoi il a pris son mode.