2013-06-05 10 views
21

node.js skalierbar, was ist damit gemeint? Welcher Teil eines node.js-Servers ist skalierbar? Ich habe gelesen, dass es sich um eine Singlethread-Technologie handelt, die nicht für Anwendungen geeignet ist, die viel CPU-Ressourcen benötigen. Diese Fakten passen nicht zur Skalierbarkeit, also was ist damit gemeint?Warum ist Node.js skalierbar?

+0

Duplizieren von: [Scaling node.js] (http://stackoverflow.com/questions/4710420/scaling-node-js). –

+0

@Jason Ich bin nicht auf der Suche nach technischen Codierung Antworten – vuvu

+1

Dieser Beitrag unterstreicht die Skalierbarkeit, einschließlich Load Balancing und Redis. –

Antwort

15

Das Javascript, das Knoten ausgeführt wird, ist single threaded, aber viele der Dinge, die Sie in Knoten aufrufen - wie Netzwerk oder Datei io - laufen in Hintergrundthreads. Sehen Sie diesen Beitrag für einen grundlegenden Überblick: Node is not single threaded

Wenn Sie die gritty Details benötigen, sollten Sie in libuv suchen, die die ‚magische‘ Stück Fäden in Ereignis Umwandlung Schleifen: http://nikhilm.github.io/uvbook/basics.html#event-loops

Außerdem, wenn Sie brauchen Um etwas CPU-intensives in Knoten selbst zu tun, können Sie dies leicht an einen Kindprozess senden - siehe http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options für Details

+0

Sind Operationen wie Lesen aus der Datenbank oder Aktualisieren, Blockieren oder Nicht-Blockieren? Dies ist w.r.t zu RDBMS. Schlägst du Node für solche Apps vor? – LearningToCode

2

ist es aufgrund der Lastverteilung skalierbar. Im Wesentlichen können Sie mehrere Jobs für den zu verarbeitenden Knoten haben, und dieser kann ohne signifikante Belastung ausgeführt werden. Dies macht es skalierbar.

+6

Wie wird der Lastenausgleich realisiert? – vuvu

3

Ist das nicht skalierbar "per se". Ist mehr, was Sie tun, ist (I/O) skalierbar, ohne etwas Besonderes tun zu müssen.

I/O ist sicherer und einfacher parallel zu tun, da es keine Daten zwischen den Ausführungsthreads teilt. Node.js ermöglicht Ihnen die Verwendung von Event-Programmierung, die einfach, elegant und einfach zu bedienen ist. Ist ein altes und bewährtes Programmierparadigma, das seit Jahren von GUIs und anderen grafikintensiven Apps wie Spielen genutzt wird.

In der Tat ist weniger skalierbar als vollwertige Sprachen wie C++, C, Java, etc .. die viel besser durch die Verwendung von Full Multithreading skalieren kann. Dies ermöglicht es, die CPU zu skalieren, öffnet aber auch eine Dose Würmer. Um CPU zu teilen, müssen Sie Daten teilen, und das ist eine andere Geschichte (Semaphore, Schlösser, etc ...)

Sie können das gleiche wie node.js mit einer der oben genannten Sprachen, aber ist nicht Teil von der Sprache selbst, also müssen Sie Ihre eigenen rollen oder Bibliotheken benutzen, die es Ihnen zur Verfügung stellen. Das heißt, ist nicht so schwer, aber sicher härter als in node.js.

Die meisten Webdienste sind IO-gebunden, also passt Node.js gut und ist in den meisten Fällen OK. Aber sobald Sie anfangen, CPU intensive Arbeit zu verwenden, werden die Ereignisse nicht bedient und alle stoppt. In diesem Fall besser eine andere Sprache verwenden. Dafür gibt es keine wirklich gute Lösung in Node. Sie können mehrere Prozesse generieren, aber dann können Sie keine Daten zwischen ihnen austauschen. Ohne Datenfreigabe gibt es keine Möglichkeit, die CPU effizient zu skalieren. Versuchen Sie es besser nicht.

Verwenden Sie Node.js für IO und eine besser geeignete Sprache mit richtigem Multithreading für CPU-intensive Arbeit.

0

Alle APIs von Node sind so geschrieben, dass sie Rückrufe unterstützen.

Zum Beispiel kann eine Funktion zum Lesen einer Datei beginnen, eine Datei zu lesen und das Steuerelement sofort an die Ausführungsumgebung zurückgeben, damit der nächste Befehl ausgeführt werden kann. Sobald die Datei-E/A abgeschlossen ist, ruft sie die Callback-Funktion auf, während die Callback-Funktion den Inhalt der Datei als Parameter übergibt. Es gibt also keine Blockierung oder Warte auf Datei-I/O. Dies macht Node.js hochgradig skalierbar, da es eine hohe Anzahl von Anfragen verarbeiten kann, ohne auf die Rückgabe von Ergebnissen warten zu müssen. - Tutorials Punkt.

Verwandte Themen