2016-05-08 14 views
3

Ich bin sehr neu in Node.js und Express. Ich lerne es gerade, indem ich meine eigenen Dienstleistungen erstelle. Ich habe kürzlich über Cluster gelesen. Ich habe verstanden, was Cluster tun. Was ich nicht verstehen kann, ist die Verwendung von Clustern in einer Produktionsanwendung.Wie verwendet man Cluster in Knoten js?

Eine Möglichkeit, an die ich denken kann, ist, den Master-Prozess zu verwenden, um nur vorne zu sitzen und die eingehende Anfrage an den nächsten verfügbaren Kindprozess round robin zu routen. Ich bin mir nicht sicher, ob es so konzipiert ist, dass es verwendet wird. Ich würde gerne wissen, wie Cluster in einer typischen Webanwendung verwendet werden sollten.

Danke.

Antwort

2

Die Clustermodule node.js werden mit node.js immer dann verwendet, wenn Sie die Anforderungsverarbeitung auf mehrere node.js-Prozesse verteilen möchten. Dies wird am häufigsten verwendet, wenn Sie Ihre Fähigkeit erhöhen möchten, mehr Anfragen/Sekunde zu verarbeiten, und Sie mehrere CPU-Kerne in Ihrem Server haben. Standardmäßig verwendet eine einzelne Instanz von node.js nicht mehrere Kerne vollständig, da das von Ihnen auf dem Server ausgeführte Kern-JavaScript single-threaded ist (verwendet einen Kern). Node.js selbst verwendet Threads für einige Dinge intern, aber es ist immer noch unwahrscheinlich, dass ein Multi-Core-System vollständig genutzt wird. Durch das Einrichten eines Clustered-Prozesses node.js für jeden CPU-Kern können Sie die verfügbaren Rechenressourcen besser maximieren.

Clustering bietet Ihnen auch zusätzliche Fehlertoleranz. Wenn ein Clusterprozess ausfällt, können andere Live-Cluster weiterhin Anforderungen erfüllen, während der deaktivierte Cluster neu gestartet wird.

Das Clustermodul für node.js hat ein paar verschiedene Planungsalgorithmen - das von Ihnen erwähnte Round-Robin ist eins. Sie können mehr darüber hier lesen: Cluster Round-Robin Load Balancing.

Da jeder Cluster ein separater Prozess ist, gibt es keine automatischen gemeinsamen Daten zwischen den verschiedenen Clusterprozessen. Daher ist Clustering am einfachsten zu implementieren, wenn keine gemeinsamen Daten vorhanden sind oder wenn die freigegebenen Daten bereits an einem Ort vorhanden sind, auf den mehrere Prozesse (z. B. in einer Datenbank) zugreifen können.

Denken Sie daran, dass ein einzelner node.js-Prozess (wenn geschrieben wird, um asynchrone E/A richtig zu verwenden und nicht stark gebunden zu berechnen) viele Anforderungen gleichzeitig an den Server stellen kann. Clustering ist, wenn Sie die Skalierbarkeit über das hinaus, was eine Instanz liefern kann, erweitern möchten.

+0

Danke. Sie schlagen vor, dass der Master so erstellt wird, dass er bei einer Anfrage an einen verfügbaren Kindprozess umgeleitet wird und der Kindprozess sich tatsächlich darum kümmert, Daten von der Datenbank abzurufen und eine Verarbeitung durchzuführen es und zurück zur UI zurückgeben? –

+0

@Photon - Ich schlage vor, Sie lesen, wie das Clustermodul node.js funktioniert. Ein übliches Modell besteht darin, es nur Round-Robin-Anfragen zuzulassen, und der empfangende Cluster verarbeitet die gesamte Anfrage. Was den empfangenden Prozess angeht, erhält er nur eine eingehende Anfrage und bearbeitet sie normal. – jfriend00

+0

@ jfriend00 verwendet der Cluster die gleiche Ereignisschleife? –

Verwandte Themen