Node.js, eine JavaScript-basierte Entwicklungsplattform, ermöglicht Entwicklern die Erstellung serverseitiger Anwendungen mit JavaScript. Seine ereignisgesteuerte Single-Thread-Architektur ist eine wesentliche Stärke und verwaltet zahlreiche gleichzeitige Anforderungen effizient, ohne den Overhead mehrerer Threads oder Prozesse.
Trotz seiner Vorteile weist die Single-Threaded-Natur von Node.js Einschränkungen auf:
Die Lösung? Das Master-Worker-Muster von Node.js (auch als Cluster-Modus bekannt). Dieses verteilte Systemdesign verwendet einen Masterprozess, der mehrere Arbeitsprozesse überwacht. Der Meister verwaltet und überwacht die Arbeiter, während die Arbeiter einzelne Aufgaben erledigen.
Node.js nutzt das Modul cluster
für die Master-Worker-Implementierung. Dieses Modul vereinfacht die Erstellung mehrerer untergeordneter Prozesse und bietet Mechanismen zur Steuerung und Kommunikation zwischen Prozessen. Hier ist eine Aufschlüsselung:
cluster
und ermitteln Sie, ob der aktuelle Prozess der Master oder ein Worker ist.cluster.fork()
, um Arbeitsprozesse zu erzeugen und Ereignis-Listener anzuhängen, um deren Status und Nachrichten zu überwachen.process.send()
.Dieses einfache Beispiel demonstriert das cluster
Modul:
<code class="language-javascript">const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); // Spawn workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); }); } else { // Workers share a TCP connection (e.g., HTTP server). http .createServer((req, res) => { res.writeHead(200); res.end('Hello from Worker!'); }) .listen(8000); console.log(`Worker ${process.pid} started`); }</code>
Der Master-Prozess bestimmt, ob es sich um den Master handelt (mittels cluster.isMaster
). Wenn dies der Fall ist, werden Worker entsprechend der Anzahl der CPU-Kerne erstellt. Jeder Worker ist ein unabhängiger Prozess mit eigenem Speicher und eigener V8-Instanz. Arbeiter richten einen HTTP-Server ein und warten auf Anfragen. Das exit
-Ereignis behandelt Worker-Abstürze und ermöglicht es dem Master, sie neu zu starten.
Verbessern Sie die Skalierbarkeit, indem Sie Nginx als Reverse-Proxy und Load Balancer verwenden, um Anfragen auf mehrere Node.js-Prozesse zu verteilen.
Nginx-Konfigurationsbeispiel:
<code class="language-nginx">http { upstream node_cluster { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; # ... more Node.js processes } server { listen 80; location / { proxy_pass http://node_cluster; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }</code>
Nginx verteilt Anfragen gleichmäßig auf die in node_cluster
aufgeführten Node.js-Prozesse.
Zusammenfassend lässt sich sagen, dass das Master-Worker-Muster von Node.js, implementiert mit dem cluster
-Modul, eine unkomplizierte und dennoch leistungsstarke Methode zum Erstellen von Multiprozessanwendungen bietet und so Leistung und Zuverlässigkeit verbessert.
Leapcell ist eine serverlose Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Mehrsprachige Kompatibilität
Unbegrenzte kostenlose Projektbereitstellung
Außergewöhnliche Kosteneffizienz
Optimierter Entwickler-Workflow
Mühelose Skalierbarkeit und hohe Leistung
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ
Lesen Sie mehr auf unserem Blog
Das obige ist der detaillierte Inhalt vonMaster-Worker-Muster in NodeJS: Erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!