it-swarm.com.de

Warum ist Node.js skalierbar?

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

21
vuvu

Das Javascript, das der Knoten ausführt, ist Single-Threaded, aber viele Dinge, die Sie im Knoten aufrufen - wie Netzwerk- oder Datei-Io - werden in Hintergrund-Threads ausgeführt. In diesem Beitrag finden Sie eine grundlegende Übersicht: Knoten ist nicht mit einem Thread versehen

Wenn Sie wichtige Details benötigen, sollten Sie sich mit libuv befassen, dem "magischen" Teil, der Threads in Event-Loops konvertiert: http://nikhilm.github.io/uvbook/basics.html#event-loops

Wenn Sie auf dem Knoten selbst etwas CPU-intensives ausführen müssen, können Sie dies problemlos an einen untergeordneten Prozess senden. Weitere Informationen finden Sie unter http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

15
jedigo

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

I/O ist sicherer und einfacher parallel auszuführen, da zwischen den Ausführungsthreads in der Regel keine Daten ausgetauscht werden. Mit Node.js können Sie Ereignisse programmieren, die einfach, elegant und benutzerfreundlich sind. Ist ein altes und bewährtes Programmierparadigma, das seit Jahren von GUIs und anderen grafikintensiven Apps wie beispielsweise Spielen verwendet wird.

Tatsächlich ist es weniger skalierbar als vollwertige Sprachen wie C++, C, Java usw., die durch die Verwendung von vollständigem Multithreading viel besser skaliert werden können. Dadurch kann die CPU ebenfalls skaliert werden, es wird jedoch auch eine Dose Würmer geöffnet. Um die CPU gemeinsam zu nutzen, müssen Sie Daten gemeinsam nutzen. Dies ist eine andere Geschichte (Semaphoren, Sperren usw.).

Sie können dasselbe wie node.js mit jeder der oben genannten Sprachen tun, sind jedoch nicht Teil der Sprache selbst. Sie müssen also Ihre eigenen erstellen oder Bibliotheken verwenden, die sie Ihnen zur Verfügung stellen. Das heißt, ist nicht so schwer, aber sicher schwieriger als in node.js.

Die meisten Webdienste sind IO gebunden, daher passt Node.js gut und ist in den meisten Fällen Ok. Sobald Sie jedoch mit der CPU-intensiven Arbeit beginnen, werden die Ereignisse nicht mehr bedient und alle Vorgänge werden abgebrochen. Verwenden Sie in diesem Fall besser eine andere Sprache. Dafür gibt es in Node keine wirklich gute Lösung. Sie können mehrere Prozesse erzeugen, aber dann können Sie keine Daten zwischen ihnen austauschen. Ohne Datenaustausch gibt es keine Möglichkeit, die CPU effizient zu skalieren. Versuchen Sie es besser nicht.

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

3
FrameGrace

es ist aufgrund des Lastausgleichs skalierbar. Grundsätzlich können mehrere Jobs für den Knoten verarbeitet werden, und der Knoten kann diese ohne nennenswerte Belastung verarbeiten. Dies macht es skalierbar.

2
ApolloSoftware

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

Beispielsweise kann eine Funktion zum Lesen einer Datei das Lesen einer Datei starten und die Steuerung sofort zur Ausführungsumgebung zurückkehren, so dass der nächste Befehl ausgeführt werden kann. Sobald die Datei-E/A abgeschlossen ist, ruft sie die Rückruffunktion auf, während die Rückruffunktion den Inhalt der Datei als Parameter übergibt. Es gibt also keine Blockierung oder Wartezeit für Datei-E/A. Dies macht Node.js in hohem Maße skalierbar, da es eine große Anzahl von Anforderungen verarbeiten kann, ohne darauf zu warten, dass eine Funktion das Ergebnis zurückgibt. - Punkt des Tutorials.

0
clever_bassi