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? .

0voto

Martin Tajur Punkte 4314

Es ist möglich, NodeJS auf mehrere Rechner zu skalieren, indem man einen reinen TCP-Loadbalancer (HAProxy) vor mehrere Rechner schaltet, auf denen jeweils ein NodeJS-Prozess läuft.

Wenn Sie dann ein gemeinsames Wissen für alle Instanzen haben, könnten Sie einen zentralen Redis-Speicher oder etwas Ähnliches verwenden, auf den dann von allen Prozessinstanzen aus zugegriffen werden kann (z. B. von allen Boxen)

0voto

Fire Crow Punkte 7129

Es ist auch möglich, den Webdienst als mehrere eigenständige Server zu konzipieren, die auf Unix-Sockets hören, so dass Sie Funktionen wie die Datenverarbeitung in getrennte Prozesse verlagern können.

Dies ähnelt den meisten Scrpting-/Datenbank-Web-Server-Architekturen, bei denen ein CGI-Prozess die Geschäftslogik abwickelt und dann die Daten über einen Unix-Socket an eine Datenbank schiebt und abruft.

Der Unterschied besteht darin, dass die Datenverarbeitung als ein Knoten-Webserver geschrieben wird, der auf einem Port lauscht.

Es ist komplexer, aber letztlich ist es das, was die Multi-Core-Entwicklung erreichen muss: eine Multiprozess-Architektur, die mehrere Komponenten für jede Web-Anfrage verwendet.

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