2012-11-12 8 views
9

Ich bin seit einiger Zeit ein Ruby/PHP-Entwickler von Webanwendungen und ich bin es gewohnt, horizontale Skalierung von Serverinstanzen zu verwenden, um mehr Anfragen zu bearbeiten. Horizontale Skalierung - bedeutet separate Instanzen einer Anwendung, die hinter einem Load-Balancer sitzt, die nichts teilen und sich nicht kennen.NodeJS horizontale Skalierung

Die Hauptfrage, die ich habe, ist, da Node.js und seine Betonung auf evented-io ermöglicht eine einzige Box, die einen node.js-Server zu handhaben, Tausende von gleichzeitigen Anfragen - ist Load-Balancing/horizontale Skalierung verwendet Nodejs Anwendungen skalieren? Ist die Skalierung einer Knoten-App auf vertikale Skalierung beschränkt (mehr RAM/Prozessorleistung beim Problem)?

Meine zweite Frage hat mit horizontaler Skalierung und Websockets von node.js zu tun. Ich habe schon einige Node.js 'Chat' Tutorials gesehen, die von WebSockets Gebrauch machen. (Favorit: http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial)

Da WebSockets effektiv eine offene Linie der Kommunikation offen zwischen einem Browser und einem Server halten, würde in der Verbindung eine horizontal skalierte Architektur typisch für die PHP/Ruby-Welt einer Chat-Anwendung wie die verursacht erklärt zu brechen - da neue Websocket-Verbindungsanfragen verschiedenen Prozessen/Servern zugewiesen würden und es keine zentrale Ressource geben würde, die alle verbundenen Clients überwacht?

Antwort

8

Node.js unterstützt die horizontale Skalierung auf die Weise, wie Sie es über das integrierte Modul cluster beschreiben.

In Bezug auf Ihre zweite Frage über die Verwendung von websockets/socket.io in dieser Umgebung müssen Sie etwas wie Redis verwenden, um den gemeinsamen Status über mehrere Instanzen Ihrer Anwendung zu speichern, wie beschrieben here.

+0

Dies ist eine alte Frage, aber ich benutze mongodb zum Speichern und Abrufen aller meine Chat-Anwendung Daten. Da ich meine Anwendung horizontal skalieren möchte, funktioniert meine Chat-Anwendung nicht, wenn ich mehr als einen Server habe. Was soll ich tun, sollte ich mongodb komplett entfernen und redis verwenden? Oder gibt es eine bessere Lösung? – DragonBorn

1

Die Cluster-Funktionalität von Node.js ist auf einen einzelnen Server mit mehreren Prozessoren beschränkt. Hauptsächlich nutzt es die Anzahl der Prozessoren im Server. Ich denke die Frage, ob sich mehr über das Szenario ergibt, wenn wir horizontal mit mehreren Servern mit einer Load-Balancer-Fassade skalieren wollen.

+0

Und um die Frage nach Socket zu beantworten, wird, wie bei jedem Serveraufruf, der Socket-Erstellungsanruf load balanciert und sagt erreicht auf Knoten Nx, für die Lebenszeit des Web-Sockets bleibt diese TCP-Verbindung offen. d.h. die gesamte Kommunikation von Browser zu Server, Server zu Browser über den Web-Socket wird immer von Nx bedient. – Pramma

0

Wenn Sie node.js-Instanzen über mehrere Server verteilt haben (horizontale Skalierung), dient es dem gleichen Zweck. Sie müssen es richtig programmieren, um diese Art der Einrichtung zu unterstützen.