Maison >interface Web >js tutoriel >Modèle maître-travailleur dans NodeJS : expliqué
Node.js, une plate-forme de développement basée sur JavaScript, permet aux développeurs de créer des applications côté serveur à l'aide de JavaScript. Son architecture monothread basée sur les événements est un atout clé, car elle gère efficacement de nombreuses requêtes simultanées sans la surcharge de plusieurs threads ou processus.
Malgré ses avantages, la nature monothread de Node.js présente des limites :
La solution ? Modèle Master-Worker de Node.js (également connu sous le nom de mode Cluster). Cette conception de système distribué utilise un processus maître supervisant plusieurs processus de travail. Le maître gère et surveille les ouvriers, tandis que les ouvriers s'occupent des tâches individuelles.
Node.js exploite le module cluster
pour l'implémentation Master-Worker. Ce module simplifie la création de plusieurs processus enfants et fournit des mécanismes de contrôle et de communication inter-processus. Voici une répartition :
cluster
et identifiez si le processus actuel est le maître ou un travailleur.cluster.fork()
pour générer des processus de travail et attacher des écouteurs d'événements pour surveiller leur statut et leurs messages.process.send()
.Cet exemple de base illustre le module cluster
:
<code class="language-javascript">const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); // Spawn workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); }); } else { // Workers share a TCP connection (e.g., HTTP server). http .createServer((req, res) => { res.writeHead(200); res.end('Hello from Worker!'); }) .listen(8000); console.log(`Worker ${process.pid} started`); }</code>
Le processus maître détermine s'il s'agit du maître (à l'aide de cluster.isMaster
). Si tel est le cas, il crée des nœuds de calcul égaux au nombre de cœurs de processeur. Chaque travailleur est un processus indépendant avec sa propre mémoire et sa propre instance V8. Les travailleurs établissent un serveur HTTP et écoutent les demandes. L'événement exit
gère les plantages des travailleurs, permettant au maître de les redémarrer.
Améliorez l'évolutivité en utilisant Nginx comme proxy inverse et équilibreur de charge pour répartir les requêtes sur plusieurs processus Node.js.
Exemple de configuration Nginx :
<code class="language-nginx">http { upstream node_cluster { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; # ... more Node.js processes } server { listen 80; location / { proxy_pass http://node_cluster; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }</code>
Nginx répartit uniformément les requêtes entre les processus Node.js répertoriés dans node_cluster
.
En résumé, le modèle Master-Worker de Node.js, implémenté à l'aide du module cluster
, offre une méthode simple mais puissante pour créer des applications multi-processus, améliorant les performances et la fiabilité.
Leapcell est une plateforme sans serveur de nouvelle génération pour l'hébergement Web, les tâches asynchrones et Redis :
Compatibilité multilingue
Déploiement de projets gratuit et illimité
Rentabilité exceptionnelle
Flux de travail rationalisé pour les développeurs
Évolutivité sans effort et hautes performances
Apprenez-en plus dans la Documentation !
Suivez-nous sur X : @LeapcellHQ
En savoir plus sur notre blog
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!