Warum node.js nicht für große Projekte geeignet ist

Warum node.js nicht für große Projekte geeignet ist

Vorwort

Zunächst müssen wir klären, was groß angelegte Anwendungen sind. Tatsächlich ist dies eine Ansichtssache und es handelt sich um eine philosophische und nicht um eine technische Frage. Wenn Sie jemand fragt: Ist eine Website wie Uniqlo, die Online-Verkäufe abwickeln kann, groß? Man könnte sagen: groß, denn es ist tatsächlich viel komplizierter als die Logik von Blogs, Unternehmenswebsites usw., die Sie normalerweise sehen. Oder wenn es klein ist, bedeutet das, dass Sie ein komplexeres System entwickelt haben. Wie ist es also im Vergleich zu Taobao? Der Vergleich zwischen Groß und Klein erfordert eine Referenz.

1. Anwendungskomponenten

Ist es möglich, dass eine vollständige Web-Anwendung nur aus einer Sprache oder einer Technologie besteht? unmöglich. Da eine vollständige Webanwendung eigentlich eine Kombination mehrerer Technologien ist, gibt es viele Lösungen, um ein bestimmtes Problem zu lösen. Beispielsweise gibt es viele logische Back-End-Lösungen, darunter Java, PHP, Python, Ruby usw.

Kurz zusammengefasst können die Komponenten einer Anwendung Folgendes umfassen:

Anzeigelogik der Weboberfläche; Backend-Geschäftslogik; Cache; Datenbank; Nachrichtenwarteschlange.

Tatsächlich können Sie auch Protokollanalysen, Datenanalysen usw. hinzufügen, aber die oben genannten sind nur die bekanntesten.

2. Arten von Anwendungen

E/A-intensiv; CPU-intensiv.

Bei gängigen Internetprodukten liegt der Engpass nicht in der Logik des Backend-Geschäfts, sondern bei der E/A, d. h. dem Lesen und Ausgeben der an den Benutzer zurückgegebenen Daten. Bei Anwendungen bezieht sich Lesen auf das Abrufen von Daten aus der Datenbank und Ausgeben auf die Ausgabe dieser Daten an den Browser des Benutzers nach einer bestimmten Verarbeitung. Dies ist E/A-intensiv.

CPU-intensiv bezieht sich auf Anwendungen, die häufige Rechenaufgaben ausführen, und Node.js weist in dieser Hinsicht tatsächlich Mängel auf.

3. Bewerbungsservice-Prozess

Wie in der Abbildung gezeigt, sendet der Benutzer eine Anforderung über den Browser, die Netzwerkkarte empfängt die TCP-Verbindung, benachrichtigt den Kernel und der Kernel ruft dann das entsprechende Serverprogramm auf.

Anfrage Anfrageprozess

Antwortrückgabeprozess

Wie in der folgenden Abbildung dargestellt, muss eine Webanwendung, wenn sie Daten zurückgeben möchte, zunächst die Daten abrufen, den Festplattentreiber über den Kernel aufrufen und die Daten in den Cache lesen. Auf diese Weise können die Daten abgerufen und in der Webanwendung verarbeitet werden. Schließlich wird der Kernel aufgerufen, um die Daten über die Netzwerkkarte an den Client zu senden.

4. Anwendungsengpass

Normalerweise ist der Engpass bei I/O-intensiven Diensten das Lesen und Schreiben von Festplatten. Wenn Sie also einen Cloud-Server kaufen, können Sie SSD-Festplatten kaufen, um die Leistung zu verbessern. Im Allgemeinen werden die Daten von Datenbanksoftware in Dateien gespeichert. Erwägen Sie zunächst das Hinzufügen eines Speichercaches, um diesen Engpass zu beheben. Speichern Sie häufig aufgerufene Daten im Cache, um zu prüfen, ob sich das Problem im aktuellen Szenario dadurch lösen lässt, z. B. durch die Verwendung von Redis. Zweitens sollten Sie den Aufbau oder die Erweiterung eines Datenbankclusters in Betracht ziehen, um die Parallelität zu verbessern.

Der Engpass bei CPU-intensiven Anwendungen ist die CPU. Dieser Engpass kann nur durch eine Erhöhung der Anzahl der CPU-Verarbeitungskerne behoben werden.

5. Verteilte Anwendungen

Bei groß angelegten gewöhnlichen Anwendungen und verteilten Anwendungen handelt es sich eigentlich um unterschiedliche Konzepte. Leser können sich verteilte Anwendungen einfach als Team vorstellen, bei dem jedes Mitglied ein Knoten ist. Ein großes Projekt erfordert die Zusammenarbeit der Mitglieder, um es abzuschließen, sodass zwischen den Mitgliedern ein gewisser Kommunikationsaufwand entsteht. Einige Mitglieder könnten sogar Intrigen schmieden, unaufrichtig sprechen und sich vor Verantwortung drücken. Es ist auch möglich, dass ein Mitglied krank ist und sich zu Hause erholt, nicht arbeiten kann usw. Angesichts dieser Probleme können die Vorteile von Node.js nicht vollständig demonstriert werden (es ist nicht so, dass es nicht möglich wäre, aber es gibt keine perfekte Infrastruktur).

Die wahre Definition von „verteilt“ besteht darin, unterschiedliche Dienstmodule auf mehreren unterschiedlichen Servern einzusetzen, Prozesse als Grundeinheit zu verwenden, sie an die Server zu verteilen, über Remote Procedures (RPC) zu kommunizieren und zusammenzuarbeiten und schließlich Dienste für die Außenwelt bereitzustellen.

Im Vergleich zur aktuellen verteilten Infrastruktur von Node.js ist die Infrastruktur der Sprache Go viel vollständiger, insbesondere im Docker-Projekt, das die Vorteile der Sprache Go voll zur Geltung bringt. Aus diesem Grund hat sich TJ Holowaychuk, ein „großer Junge“ in der Node.js-Community, der Sprache Go zugewandt, weil er verteilte Anwendungen entwickeln wollte.

Eigentlich muss man sich über das Verteilungsproblem keine allzu großen Sorgen machen. Schließlich war JavaScript ursprünglich nur eine Skriptsprache, die im Browser ausgeführt wurde. JavaScript ist nicht allmächtig. Warum muss es also bei der Entwicklung auf Betriebssystemebene verwendet werden? Wäre es nicht besser, eine geeignetere Sprache zu finden? Genau wie wir jetzt JavaScript zum Erstellen von Webanwendungen verwenden.

6. Multiprozess-Node.js

Nach dem Verständnis der oben genannten Wissenspunkte sollte den Lesern nun bekannt sein, dass Node.js wenig mit groß angelegten Anwendungen zu tun hat. Die meisten Entwickler, die Node.js lernen, sind Frontend-Entwickler und verfügen daher nicht über die grundlegenden Kenntnisse des Backends. Bei der Suche nach Informationen im Internet stellen sie fest, dass Node.js nur einen einzigen Kern verwenden kann. Als sie hören, dass TJ Holowaychuk sich dem Go-Lager zugewandt hat, fragen sich einige Entwickler, ob Node.js nicht für die Entwicklung großer Anwendungen geeignet ist.

Das Problem, dass Node.js nur einen einzigen Kern verwenden kann, wurde gelöst. Das später verwendete Egg-Cluster-Modul im Egg.js-Framework löst dieses Problem durch die Verwendung mehrerer Prozesse sehr gut.

Oben sind die Einzelheiten, warum node.js nicht für große Projekte geeignet ist. Weitere Informationen zu node.js finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Der gesamte Prozess der Verwendung von node.js Express zum automatischen Erstellen des Projekts
  • Konstruktionsschritte für das Node-Koa2-SSR-Projekt
  • Einfache Bereitstellung eines Node.Js-Projekts in der Alibaba Cloud
  • So stellen Sie ein Node.js-Projekt auf einem Cloud-Server bereit (Reihe für Anfänger)
  • Detaillierte Schritte zum Erstellen eines Vue-Projekts in Node
  • Node-Befehlszeilentool zur Realisierung des Standardprozesses zur automatischen Initialisierung der Projektentwicklung
  • So erstellen Sie Gitkeep für alle leeren Ordner im NodeJS-Projekt
  • Erstellen Sie das vueSSR-Projekt von 0 bis 1: Knoten- und Vue-CLI3-Konfiguration
  • So führen Sie Unit-Tests für Node.js-Projekte in PHPStorm durch
  • So verwenden Sie pm2 zum automatischen Bereitstellen von Node-Projekten

<<:  Detaillierte Erläuterung der Apache-Website-Dienstkonfiguration basierend auf Linux

>>:  mysql erhält das gestrige Datum, das heutige Datum, das morgige Datum und die Uhrzeit der vorherigen und der nächsten Stunde

Artikel empfehlen

Tutorial zur binären Kompilierung und Installation von MySql centos7 unter Linux

// Ich habe einen ganzen Nachmittag für die Insta...

So verwenden Sie CSS-Attributselektoren zum Spleißen von HTML-DNA

CSS-Attributselektoren sind großartig. Sie können...

So verwenden Sie Makros in JavaScript

In Sprachen werden häufig Makros zur Implementier...

jQuery implementiert Akkordeoneffekte

Dieser Artikel gibt Ihnen den spezifischen Code v...

So stellen Sie mit Docker ein einfaches C/C++-Programm bereit

1. Erstellen Sie zunächst eine Datei hello-world....

JS tiefe und flache Kopierdetails

Inhaltsverzeichnis 1. Was bedeutet „Shallow Copy“...

Detaillierte Schritte zur Installation von Nginx unter Linux

1. Nginx-Installationsschritte 1.1 Offizielle Web...

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

MySQL-Indexoptimierung: Detaillierte Einführung in die Paging-Erkundung

Inhaltsverzeichnis MySQL-Indexoptimierung – Pagin...

Detaillierte Erklärung zur Verwendung der JavaScript-Paging-Komponente

Die Paginierungskomponente ist eine häufige Kompo...

Analyse der Vor- und Nachteile von gespeicherten MySQL-Prozeduren

MySQL Version 5.0 begann, gespeicherte Prozeduren...