Heim > Artikel > Web-Frontend > So vereinfachen Sie das Node.js-Clustering mit PM2
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. In diesem Artikel wird hauptsächlich ausführlich vorgestellt, wie man PM2 verwendet, um das Node.js-Clustering zu vereinfachen. Der Herausgeber findet es ziemlich gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
Das Cluster-Modul von Node.js
Glücklicherweise stellt uns Node.js das Cluster-Modul 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 Worker-Threads angeben, die Anzahl der Threads ist nicht auf die Anzahl der CPU-Kerne beschränkt, da sie einfach ist läuft als Child-Thread auf der CPU.
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 am Code vornehmen müssen. 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 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 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: PM2 so konfigurieren, dass er automatisch startet 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 starten Starten Sie und führen Sie dann den folgenden Befehl aus: Dadurch wird eine Datei dump.pm2 im Verzeichnis ~/.pm2 generiert, die alle derzeit auf PM2 ausgeführten Anwendungen beschreibt. Führen Sie dann den Befehl aus: Beachten Sie, dass der optionale Parameter platform hinzugefügt werden muss, 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: Vollständige Aufzeichnung der Redis-Clusterkonstruktion 10 empfohlene Artikel zur Clusterbereitstellung Eine kurze Einführung in den MySQL-Cluster (Bild) Das obige ist der detaillierte Inhalt vonSo vereinfachen Sie das Node.js-Clustering mit PM2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!process.on('message', function(msg) {
if (msg === 'shutdown') {
close_all_connections();
delete_cache();
server.close();
process.exit(0);
}
});
pm2 save
pm2 startup [platform]