Ich habe viel gesucht, um diese Frage herauszufinden, aber ich habe keine klare Erklärung bekommen. Gibt es nur einen Unterschied, dass eine Cluster-App skaliert werden kann und eine gegabelte App nicht?
Auf der öffentlichen Website von PM2 wird erklärt, dass der Cluster-Modus diese Funktion ausführen kann, aber niemand sagt über die Vorteile des Fork-Modus (möglicherweise kann er NODE_APP_INSTANCE
variabel werden).
Ich denke, Cluster könnte Teil von Fork sein, weil Fork allgemein verwendet zu werden scheint. Ich denke also, Fork bedeutet ab PM2 nur "gegabelter Prozess" und Cluster bedeutet "gegabelter Prozess, der skaliert werden kann". Warum sollte ich dann den Gabelmodus verwenden?
pm2 start -i 30 app.js
den nodejs-Cluster verwenden und die Arbeit erledigen lassen.cluster mode
Master-Prozess gibt es einen einzelnen Fehlerpunkt.Node.js ist Single-Thread.
Dies bedeutet, dass nur 1 Kern Ihrer Intel Quad-Core-CPU die Knotenanwendung ausführen kann.
Es hieß :
fork_mode
.Wir verwenden es für lokale Entwickler .
pm2 start server.js -i 0
hilft Ihnen, 1 Knotenthread auf jedem Kern Ihrer CPU auszuführen.Und automatischer Lastausgleich der zustandslosen kommenden Anforderungen.
Am selben Port .
Wir nennen es :
cluster_mode
.Welches für die Leistung in der Produktion verwendet wird .
Sie können dies auch auf einem lokalen Entwickler tun, wenn Sie Ihren PC einem Stresstest unterziehen möchten :)
quelle
Dokumentation und Quellen sind hier wirklich irreführend.
Wenn Sie dies in den Quellen nachlesen, scheinen die einzigen Unterschiede darin zu bestehen, dass sie entweder Knoten
cluster
oderchild_process
API verwenden. Dacluster
letzteres verwendet wird, tun Sie tatsächlich dasselbe. Es gibt nur viel mehr Gewohnheiten,stdio
die im Gasthaus herumlaufenfork_mode
. Auchcluster
kann nur mit über Strings kommuniziert werden, nicht widerspricht .Standardmäßig verwenden Sie
fork_mode
. Wenn Sie die-i [number]
Option-bestehen, gehen Sie hineincluster_mode
, auf die Sie im Allgemeinen mit w / abzielenpm2
.Außerdem kann die
fork_mode
Instanz aufgrund wahrscheinlich nicht denselben Port abhörenEADDRINUSE
.cluster_mode
können. Auf diese Weise können Sie Ihre App auch so strukturieren, dass sie auf demselben Port ausgeführt wird, auf dem der Lastausgleich automatisch erfolgt. Sie müssen dann Apps ohne Status erstellen, z. B. Sitzungen, Datenbank.quelle
cluster
eingebautes Modul verwendetchild_process
intern? und Ihr Vorschlag ist, wenn ich flexibel sein mussstdio
, muss ich den Gabel-Modus verwenden?stdio
Sache ist etwas vonpm2
der Umsetzung. Mach dir darüber keine Sorgen. Sie möchten escluster_mode
in der Produktion verwenden, da es Ihre Instanz härtet, da-i [number]
Instanzen im Hintergrund ausgeführt werden. Verwenden Siefork_mode
diese Option, wenn keine Härtung erforderlich ist oder Sie bessere Protokolle und Materialien wünschen.cluster_mode
Verwendet offensichtlich auch mehr Ressourcen Ihres Systems, da Sie-i [number]
Prozesse ausführen.cluster_mode
, Last-Bilanzcluster_mode
,cluster_mode
mehr Ressourcen verbraucht ..). Das ist der Grund, warum ich nicht gewählt habe. Können Sie beide einfachen Anwendungsfälle erklären? Jeder Fall muss vernünftig sein, warum er seinen Modus angenommen hat.