Supose Ich muss eine Webanwendung implementieren, die eine hohe Anzahl gleichzeitiger Benutzer hat. Ich entscheide mich dafür, node.js zu verwenden, weil es sehr gut skaliert, gute Leistung hat, Open-Source-Gemeinschaft usw. Um Engpässe zu vermeiden, weil ich mehrere Nutzer in derselben Ereignisschleife haben könnte, entscheide ich mich für einen Cluster von Prozesse, um die Multi-Core-CPU zu nutzen. Außerdem habe ich 3 Maschinen (Haupt + 2), weil ich Big-Data mit Cassandra manipulieren muss. Awesome, das bedeutet, ich habe 3 * n node.js Prozesse, wobei n die Anzahl der Kerne der CPU ist (Maschinen sind identisch).So entwerfen Sie einen verteilten node.js Webserver
Ok, dann beginne ich ein Forschungs- und ich am Ende mit dem folgenden Schema:
- Nginx der Port 80 überwacht und nur zu dienen statische Inhalte (img, CSS, JS, etc) verwendet.
Leitet den dynamischen Datenverkehr an haproxy weiter. Ich weiß, wie man nginx konfiguriert, aber ich muss immer noch auf haproxy schauen, also werde ich sagen, dass haproxy Port 4000 hört. Nginx und haproxy sind in der Hauptmaschine (der Einstiegspunkt) installiert. - Haproxy Lastbilanzen zwischen den 3 Maschinen. Er leitet Verkehr auf Port 4001, das heißt, die node.js Prozesse zu 4001. hören 4001.
Erstellen einer Sitzung ist ganz normal, oder? Eine Sitzung ist nur eine Karte und diese Karte ist ein Objekt und dieses Objekt lebt in einem node.js-Prozess. Haproxy wird mit einem Round-Robin-Scheduler konfiguriert, sodass derselbe Benutzer an verschiedene node.js-Prozesse weitergeleitet werden kann. Wie kann ich das gleiche Sitzungsobjekt für alle node.js-Prozesse freigeben? Wie kann ich ein globales Objekt teilen (dies beinhaltet die gleiche Maschine (node.js cluster) und über das Netzwerk)? Wie soll ich eine verteilte Web-App mit node.js entwerfen? Gibt es Module, die die Synchronisationsaufgaben erleichtern?
Haproxy hat mehrere Möglichkeiten, um Sticky-Sitzungen zu behandeln, http: // stacko verflow.com/questions/6498030/load-balancing-haproxy-or-other-sticky-sessions. Verwenden Sie für ein globales Objekt redis oder etwas. – numbers1311407
Ähnlich http://stackoverflow.com/questions/5398209/scaling-node-js-across-multiple-cores-servers auch nur 3 Servern. –