Waarom Node.js clustering de sleutel is voor geoptimaliseerde applicaties

ict

[ad_1]

Node.js is een server-side JavaScript runtime die gebruik maakt van een event-driven, non-blocking input-output (I/O) model. Het wordt algemeen gebruikt voor het bouwen van snelle en schaalbare webapps. Ook kan je profiteren van de grote gemeenschap en een rijke bibliotheek aan modules die verschillende taken en processen vereenvoudigen.

Clustering verbetert de prestaties van Node.js applicaties door ze op meerdere processen te laten draaien. Door deze techniek kunnen ze het volledige potentieel van een multi-core systeem benutten.

In dit artikel wordt uitgebreid ingegaan op clustering in Node.js en hoe het de prestaties van een applicatie beïnvloedt.

Wat is clustering?

Standaard draaien Node.js applicaties op een enkele thread. Dit single-threaded karakter betekent dat Node.js niet alle cores kan gebruiken in een multi-core systeem – wat de meeste systemen op dit moment zijn.

Node.js kan nog steeds meerdere verzoeken tegelijk verwerken door gebruik te maken van niet-blokkerende I/O-bewerkingen en asynchrone programmeertechnieken.

Zware rekentaken kunnen echter de event loop blokkeren en ervoor zorgen dat de applicatie niet meer reageert. Daarom wordt Node.js geleverd met een native clustermodule – ongeacht het single-threaded karakter – om te profiteren van de totale verwerkingskracht van een multi-core systeem.

Het uitvoeren van meerdere processen maakt gebruik van de verwerkingskracht van meerdere cores van de central processing unit (CPU) om parallelle verwerking mogelijk te maken, responstijden te verkorten en doorvoer te verhogen. Dit verbetert op zijn beurt de prestaties en schaalbaarheid van Node.js applicaties.

Hoe werkt clusteren?

Met de Node.js clustermodule kan een Node.js applicatie een cluster van gelijktijdig draaiende childprocessen maken, die elk een deel van de werklast van de applicatie verwerken.

Bij het initialiseren van de clustermodule maakt de applicatie het primaire proces aan, dat vervolgens de childprocessen in workerprocessen forkt. Het primaire proces fungeert als load balancer en verdeelt de werklast over de workerprocessen terwijl elk workerproces luistert naar binnenkomende verzoeken.

De Node.js clustermodule heeft twee methoden om inkomende verbindingen te verdelen.

  • De round-robin benadering – Het primaire proces luistert op een poort, accepteert nieuwe verbindingen en verdeelt de workloadgelijkmatig om ervoor te zorgen dat geen enkel proces overbelast raakt. Dit is de standaard aanpak op alle besturingssystemen behalve Windows.
  • De tweede benadering – Het primaire proces maakt de luistersocket aan en stuurt deze naar “geïnteresseerde” werkers, die binnenkomende verbindingen direct accepteren.

Theoretisch zou de tweede benadering – die gecompliceerder is – betere prestaties moeten leveren. Maar in de praktijk is de verdeling van de verbindingen erg onevenwichtig. De Node.js documentatie vermeldt dat 70% van alle verbindingen terecht komt bij slechts twee van de acht processen.

[ad_2]

https://kinsta.com/nl/blog/node-js-clustering/