Node.js est connu pour sa vitesse et son efficacité, ce qui en fait un choix populaire pour créer des applications évolutives hautes performances.
Cependant, dès la sortie de la boîte, Node.js est monothread, ce qui signifie qu'il s'exécute sur un seul cœur de processeur, ce qui peut être limitant dans les environnements de serveur multicœurs. Si votre application est gourmande en ressources ou si vous prévoyez un trafic élevé, vous souhaiterez maximiser l'utilisation des cœurs de processeur de votre serveur.
C'est là qu'intervient le clustering Node.js.
Dans cet article, nous verrons ce qu'est le clustering Node.js, pourquoi il est important et comment vous pouvez l'utiliser pour améliorer les performances de vos applications.
Le clustering Node.js est une technique qui vous permet d'utiliser tous les cœurs de processeur en générant plusieurs instances (workers) de votre application Node.js.
Ces travailleurs partagent le même port et sont gérés par un processus maître. Chaque travailleur peut gérer les demandes entrantes de manière indépendante, permettant à votre application de répartir la charge de travail et de traiter les demandes en parallèle.
En clusterisant votre application Node.js, vous pouvez :
Dans un cluster Node.js, il existe un processus maître qui contrôle plusieurs processus travailleur.
Le processus maître ne gère pas directement les requêtes HTTP mais gère les nœuds de calcul qui le font. Les demandes des clients sont réparties entre ces travailleurs, équilibrant ainsi la charge de manière efficace.
Si un processus de travail tombe en panne pour une raison quelconque, le processus maître peut en générer un nouveau, garantissant ainsi un temps d'arrêt minimal.
Le clustering est particulièrement utile lorsque votre application :
Dans les cas ci-dessus, vous pouvez améliorer le débit en utilisant des techniques de programmation asynchrone.
Node.js fournit un module de cluster intégré pour créer facilement des clusters. Passons en revue un exemple simple de la façon de regrouper votre application Node.js.
Étape 1 : Configuration de votre application
Avant d'ajouter le clustering, supposons que vous disposez d'un simple serveur HTTP (server.js) :
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200); res.end('Hello World\n'); }); server.listen(3000, () => { console.log(`Worker process ID: ${process.pid} is listening on port 3000`); });
Cette application fonctionne sur un seul cœur. Modifions-le pour utiliser le clustering.
Étape 2 : Utilisation du module cluster
Le module cluster nous permet de diviser le processus actuel en plusieurs processus de travail. Voici comment mettre en œuvre le clustering :
const cluster = require('cluster'); const http = require('http'); const os = require('os'); // Get the number of CPU cores const numCPUs = os.cpus().length; if (cluster.isMaster) { console.log(`Master process ID: ${process.pid}`); // Fork workers for each CPU core for (let i = 0; i < numCPUs; i++) { cluster.fork(); } // Listen for worker exit and replace it with a new one cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died. Spawning a new one...`); cluster.fork(); }); } else { // Workers share the same TCP connection http.createServer((req, res) => { res.writeHead(200); res.end('Hello from worker ' + process.pid + '\n'); }).listen(3000); console.log(`Worker process ID: ${process.pid}`); }
Explication :
1. Processus maître : Lorsque le processus démarre, il vérifie s'il s'agit du processus maître (cluster.isMaster). Le maître est responsable du forking des processus de travail, un pour chaque cœur de processeur. La méthode os.cpus() permet de récupérer le nombre de cœurs CPU disponibles.
2. Processus de travail : Pour chaque cœur de processeur, un nouveau travailleur est forké (cluster.fork()). Ces processus de travail exécutent le serveur HTTP et gèrent les demandes entrantes.
3. Tolérance aux pannes : Si un processus de travail plante, l'événement cluster.on('exit') est déclenché et un nouveau travailleur est généré pour remplacer celui mort.
Étape 3 : tester votre application en cluster
Maintenant, si vous exécutez l'application :
node server.js
Vous remarquerez que plusieurs travailleurs sont créés, chacun avec un ID de processus unique. Chaque demande est traitée par un travailleur différent, équilibrant efficacement la charge.
Vous pouvez tester comment le clustering améliore les performances de votre application en envoyant plusieurs requêtes et en observant comment la charge de travail est répartie entre les travailleurs.
Alors, la prochaine fois que vous créerez une application Node.js hautes performances, n'oubliez pas d'envisager le clustering !
C'est tout pour ce blog ! Restez à l'écoute pour plus de mises à jour et continuez à créer des applications incroyables ! ?✨
Bon codage ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!