Le module Cluster
dans Node.js a une fonction clé: distribuer les connexions réseau entrantes sur plusieurs processus de travail. Dans un environnement de production typique, un système informatique utilise plusieurs processeurs ou cœurs. Node.js est une plate-forme mono-thread, ce qui signifie qu'elle utilise un seul cœur de processeur à la fois. Mais avec le module Cluster
, Node.js peut créer des sous-processus enfants pour gérer le trafic entrant, en exploitant efficacement tous les cœurs disponibles sur la machine.
En termes simples, si vous avez un serveur avec 4 cœurs, sans le module de Cluster
, votre application Node.js ne peut utiliser qu'un seul de ces cœurs. C'est là que réside l’importance du module 'Cluster'. Il vous permet de créer un processus parent principal (Master), qui écoute les connexions entrantes et les distribue à plusieurs processus enfants (Workers). Chaque processus enfant fonctionne sur un seul thread et est indépendant des autres. Dans une configuration optimisée, le nombre de processus enfants serait égal au nombre de cœurs CPU de la machine.
Un exemple simple de l'utilisation du module Cluster
serait un serveur web. Le master écoutera les connexions entrantes sur un port spécifique, comme le port 80, et lorsque une nouvelle connexion entraînée par un client est établie, il la transmettra à un des sous-processus de travail disponibles.
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer(function (req, res) {
res.writeHead(200);
res.end("Hello from Worker "+cluster.worker.id);
}).listen(8000);
}
Dans le code ci-dessus, le processus master est créé et détecte le nombre de cœurs CPU disponibles sur la machine à l'aide de la méthode os.cpus().length
. Pour chaque cœur, le processus master crée un processus de travail en utilisant la méthode cluster.fork()
. Chaque processus de travail crée ensuite son propre serveur HTTP qui écoute sur le port 8000.
Le module Cluster
, lorsqu'il est utilisé efficacement, peut améliorer considérablement les performances et la fiabilité de votre application Node.js. Il est important de noter que la gestion des erreurs est essentielle lors du travail avec plusieurs processus, car une erreur non gérée dans un processus enfant pourrait probablement faire tomber tout le cluster.