Heim > Artikel > Web-Frontend > PM2 erleichtert die Implementierung von Node.js-Clustering
In diesem Artikel wird hauptsächlich detailliert beschrieben, wie Sie PM2 verwenden, um das Node.js-Clustering zu vereinfachen. Der Herausgeber findet es ziemlich gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
Einführung
Wie wir alle wissen, läuft Node.js auf der JavaScript-Laufzeitplattform von Chrome, die wir elegant als V8-Engine bezeichnen. Sowohl die V8-Engine als auch spätere Node.js laufen im Single-Thread-Modus, sodass sie ihre Leistung in Multi-Core-Prozessorsystemen nicht maximieren können.
Node.js-Clustermodul
Glücklicherweise stellt uns Node.js das Clustermodul zur Verfügung, das mehrere Worker-Threads generieren kann, um dieselbe TCP-Verbindung zu teilen.
Wie funktioniert es?
Zuerst erstellt Cluster einen Master und repliziert dann mehrere Server-Apps (auch Worker-Threads genannt) entsprechend der von Ihnen angegebenen Anzahl. Es kommuniziert mit Arbeitsthreads über IPC-Kanäle und verwendet einen integrierten Lastausgleich, um den Druck zwischen Threads besser zu bewältigen. Der Lastausgleich verwendet den Round-Robin-Algorithmus (auch als Round-Robin-Algorithmus bezeichnet).
Bei Verwendung der Round-Robin-Planungsstrategie akzeptiert () der Master alle eingehenden Verbindungsanforderungen und sendet dann die entsprechende TCP-Anforderungsverarbeitung an den ausgewählten Arbeitsthread (diese Methode kommuniziert weiterhin über IPC).
Wie benutzt man es?
Hier ist ein einfaches Beispiel:
var cluster = require('cluster'); var http = require('http'); var os = require('os'); var numCPUs = os.cpus().length; if (cluster.isMaster) { // Master: // Let's fork as many workers as you have CPU cores for (var i = 0; i < numCPUs; ++i) { cluster.fork(); } } else { // Worker: // Let's spawn a HTTP server // (Workers can share any TCP connection. // In this case its a HTTP server) http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8080); }
Natürlich können Sie eine beliebige Anzahl von Arbeitsthreads angeben, und die Anzahl der Threads ist nicht begrenzt zu CPU-Kernen Die Zahl, da es nur als Sub-Thread auf der CPU läuft.
Wie Sie sehen, müssen Sie Ihren Code in die Verarbeitungslogik des Clusters kapseln und zusätzlichen Code hinzufügen, um anzugeben, was zu tun ist, wenn ein Thread hängt.
So verwenden Sie PM2
Der integrierte Cluster
PM2 enthält intern die gesamte oben genannte Verarbeitungslogik, sodass Sie keine Änderungen vornehmen müssen etwaige Änderungen am Code. Wir stellen den obigen Code in seiner ursprünglichen Form wieder her:
var http = require('http'); http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8080);
und führen ihn dann auf der Konsole aus:
$ pm2 start app.js -i 4
-i 847b5bfd1919d21999b532f365e4144b Der Parameter wird verwendet, um PM2 anzuweisen, Ihre App im Cluster-Modus (entsprechend Fork-Modus genannt) auszuführen. Die folgende Zahl gibt die Anzahl der zu startenden Worker-Threads an. Wenn die angegebene Zahl 0 ist, generiert PM2 entsprechende Arbeitsthreads basierend auf der Anzahl Ihrer CPU-Kerne.
Halten Sie Ihre Apps in jeder Situation am Laufen
Wenn ein Arbeitsthread hängen bleibt, machen Sie sich keine Sorgen, PM2 startet ihn sofort neu. Natürlich können Sie diese Threads auch jederzeit manuell neu starten:
Cluster in Echtzeit erweitern
Jederzeit, wenn Sie eine Vergrößerung benötigen die Anzahl der Worker-Threads. Der Cluster kann durch PM2-Skala f8b9c9bed94fca15ffff68e1b93092e4 erweitert werden. Der Parameter 751fecf49c9d13ca89ee2cbb9b75d4f6 gibt die Anzahl der Worker-Threads an und wird verwendet, um die Anzahl der Cluster zu erhöhen oder zu verringern. Sie können auch über die PM2 Scale App +3 angeben, wie viele Worker-Threads hinzugefügt werden sollen.
Erzielung von Updates ohne Ausfallzeiten in der Produktionsumgebung
Die Reload-Funktion von PM2 startet alle Arbeitsthreads nacheinander neu. Jeder Thread wartet auf die Erstellung eines neuen Threads, bevor er beendet wird. Wenn Sie also neuen Code in einer Produktionsumgebung bereitstellen, läuft der Server ohne Unterbrechung weiter.
Die Verwendung der Funktion „gracefulReload“ kann den gleichen Zweck erreichen. Der Unterschied besteht darin, dass der Arbeitsthread nicht sofort beendet wird, sondern ein Shutdown-Signal über IPC gesendet wird, um alle aktuellen Verbindungen zu schließen und einige benutzerdefinierte Aufgaben zu bearbeiten, und dann ordnungsgemäß beendet wird . Zum Beispiel der folgende Code:
process.on('message', function(msg) { if (msg === 'shutdown') { close_all_connections(); delete_cache(); server.close(); process.exit(0); } });
Konfigurieren Sie PM2 für den automatischen Start
Wenn Sie möchten, dass PM2 nach dem Neustart des Servers automatisch die vorherige Anwendung ausführt , können Sie Ihre Anwendung zunächst über pm2 start starten und dann den folgenden Befehl ausführen:
pm2 save
Dadurch wird eine dump.pm2-Datei in ~/.pm2 generiert Verzeichnis, das unter „Alle derzeit auf PM2 ausgeführten Anwendungen“ beschrieben wird. Führen Sie dann den Befehl aus:
pm2 startup [platform]
Beachten Sie, dass es notwendig ist, den optionalen Parameter platform hinzuzufügen, um pm2 klar über die aktuelle Systemumgebung zu informieren. Auf diese Weise führt PM2 beim nächsten Neustart des Servers automatisch die zuvor gespeicherte Anwendung aus.
Fazit
Das Cluster-Modul ist sehr leistungsstark und die Verwendung von PM2 wird es einfacher machen. In der Node 0.10.x-Ära war Cluster.js noch ein experimentelles Produkt, aber ab Node 0.11.x ist es allmählich ausgereift und bereitet sich auf die offizielle Veröffentlichung vor, einschließlich der Node 0.12.x-Version. Es wird dringend empfohlen, die neuesten Versionen von Node.js und PM2 zu verwenden. Die Mitwirkenden dieser Produkte arbeiten ständig hart daran, sie zu verbessern.
Verwandte Empfehlungen:
Analyse zum Redis-Cluster-Fehler
Grafik-Tutorial zum Aufbau eines Redis-Clusters
Tutorial zum Aufbau eines Redis-Clusters und aufgetretene Probleme bei der Problembehandlung
Das obige ist der detaillierte Inhalt vonPM2 erleichtert die Implementierung von Node.js-Clustering. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!