711 Stimmen

Node.js auf Multi-Core-Maschinen

Node.js sieht interessant aus, BUT Ich muss etwas übersehen haben - ist Node.js nicht darauf abgestimmt, nur auf einem einzigen Prozess und Thread zu laufen?

Wie skaliert es dann für Multi-Core-CPUs und Multi-CPU-Server? Schließlich ist es großartig, einen möglichst schnellen Single-Thread-Server zu bauen, aber für hohe Lasten würde ich mehrere CPUs verwenden wollen. Und das Gleiche gilt für die Beschleunigung von Anwendungen - anscheinend werden heute mehrere CPUs verwendet und die Aufgaben parallelisiert.

Wie passt Node.js in dieses Bild? Ist es die Idee, mehrere Instanzen irgendwie zu verteilen oder was?

4 Stimmen

Es sieht so aus, als ob Ryah anfängt, sich ernsthaft mit der eingebauten Multi-Core-Unterstützung in Node zu beschäftigen: github.com/joyent/node/commit/

3 Stimmen

Der PM2-Prozessmanager verwendet intern das Clustermodul, um Ihre NodeJS-Anwendungen auf alle verfügbaren Kerne zu verteilen: github.com/Unitech/pm2

1 Stimmen

@broofa, Das sind keine echten Threads und Kindprozesse haben keinen gemeinsamen Speicher. Siehe auch Was ist das Nodejs-Equivalent zu Javas echtem Threading und flüchtigen statischen Variablen? .

15voto

Alister Punkte 24134

En Cluster Modul ermöglicht es Ihnen, alle Kerne Ihres Rechners zu nutzen. In der Tat können Sie die Vorteile dieses Moduls mit nur 2 Befehlen und ohne Berührung Ihres Codes nutzen, indem Sie einen sehr beliebten Prozessmanager verwenden pm2 .

npm i -g pm2
pm2 start app.js -i max

14voto

CyberFonic Punkte 3799

Multi-Node nutzt alle Kerne, die Sie möglicherweise haben.
Werfen Sie einen Blick auf http://github.com/kriszyp/multi-node .

Für einfachere Anforderungen können Sie mehrere Kopien des Knotens auf verschiedenen Portnummern starten und ihnen einen Load Balancer vorschalten.

14voto

Will Stern Punkte 16443

Wie oben erwähnt, Cluster skaliert und balanciert die Last Ihrer Anwendung über alle Kerne hinweg.

Hinzufügen von etwas wie

cluster.on('exit', function () {
  cluster.fork();
});

Wird alle ausgefallenen Arbeiter neu starten.

Heutzutage bevorzugen viele Menschen auch PM2 die das Clustering für Sie übernimmt und auch die einige coole Überwachungsfunktionen .

Fügen Sie dann Nginx oder HAProxy vor mehreren Rechnern hinzu, die mit Clustering laufen, und Sie haben mehrere Ausfallsicherheitsebenen und eine viel höhere Lastkapazität.

9voto

mikeal Punkte 4027

Zukünftige Versionen von Node werden es ermöglichen, einen Prozess zu forken und Nachrichten an ihn weiterzuleiten, und Ryan hat erklärt, dass er einen Weg finden will, um auch Datei-Handler zu teilen, es wird also keine einfache Web-Worker-Implementierung sein.

Zu diesem Zeitpunkt gibt es keine einfache Lösung für dieses Problem, aber es ist noch sehr früh und Node ist eines der sich am schnellsten entwickelnden Open-Source-Projekte, die ich je gesehen habe, also erwarten Sie etwas Großartiges in naher Zukunft.

8voto

Oleksii Trekhleb Punkte 2253

Sie können Ihre node.js-Anwendung auf mehreren Kernen laufen lassen, indem Sie die Cluster Modul in Kombination mit os Modul, das verwendet werden kann, um festzustellen, wie viele CPUs Sie haben.

Nehmen wir zum Beispiel an, Sie haben eine server Modul, das einen einfachen http-Server auf dem Backend ausführt, und Sie möchten es für mehrere CPUs ausführen:

// Dependencies.
const server = require('./lib/server'); // This is our custom server module.
const cluster = require('cluster');
const os = require('os');

 // If we're on the master thread start the forks.
if (cluster.isMaster) {
  // Fork the process.
  for (let i = 0; i < os.cpus().length; i++) {
    cluster.fork();
  }
} else {
  // If we're not on the master thread start the server.
  server.init();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X