Comme nous le savons tous, Node.js fonctionne sur la plate-forme d'exécution JavaScript de Chrome, que nous appelons élégamment le moteur V8. Le moteur V8 et plus tard Node.js fonctionnent de manière monothread, ils ne peuvent donc pas maximiser leurs performances dans les systèmes à processeurs multicœurs. Cet article présente principalement en détail comment utiliser PM2 pour faciliter le clustering Node.js. L'éditeur pense que c'est plutôt bien, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un œil. J'espère que cela pourra aider tout le monde.
Le module cluster de Node.js
Heureusement, Node.js nous fournit le module cluster, qui peut générer plusieurs threads de travail pour partager la même connexion TCP.
Comment ça marche ?
Tout d'abord, Cluster créera un maître, puis répliquera plusieurs applications serveur (également appelées threads de travail) en fonction du nombre que vous spécifiez. Il communique avec les threads de travail via les canaux IPC et utilise l'équilibrage de charge intégré pour mieux gérer la pression entre les threads. L'équilibrage de charge utilise l'algorithme Round-robin (également connu sous le nom d'algorithme round-robin).
Lors de l'utilisation de la stratégie de planification Round-robin, le maître accepte() toutes les demandes de connexion entrantes, puis envoie le traitement de la demande TCP correspondant au thread de travail sélectionné (cette méthode communique toujours via IPC).
Comment l'utiliser ?
Voici un exemple basique :
var cluster = require('cluster'); var http = require('http'); var os = require('os'); var numCPUs = os.cpus().length; if (cluster.isMaster) { // Master: // Let's fork as many workers as you have CPU cores for (var i = 0; i < numCPUs; ++i) { cluster.fork(); } } else { // Worker: // Let's spawn a HTTP server // (Workers can share any TCP connection. // In this case its a HTTP server) http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8080); }
Bien sûr, vous pouvez spécifier n'importe quel nombre de threads de travail, le nombre de threads n'est pas limité au nombre de cœurs de processeur, puisqu'il suffit s'exécute en tant que thread enfant sur le processeur.
Comme vous pouvez le voir, pour que cela fonctionne correctement, vous devez encapsuler votre code dans la logique de traitement du cluster et ajouter du code supplémentaire pour spécifier quoi faire lorsqu'un thread se bloque.
Comment utiliser PM2
Le cluster intégré
PM2 contient toute la logique de traitement ci-dessus en interne, vous n'avez donc pas à apporter de modifications au code. Nous restaurons le code ci-dessus dans sa forme originale :
var http = require('http'); http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8080);
puis l'exécutons sur la console :
$ pm2 start app.js -i 4
-i Gardez vos applications en marche quelle que soit la situation Si un thread de travail se bloque, ne vous inquiétez pas, PM2 le redémarrera immédiatement. Bien entendu, vous pouvez également redémarrer manuellement ces threads à tout moment : Agrandissez le cluster en temps réel A tout moment, si vous avez besoin d'augmenter le nombre de threads de travail, le cluster peut être étendu via l'échelle pm2 Réalisation de mises à jour sans temps d'arrêt dans l'environnement de production La fonction de rechargement L'utilisation de la fonction gracefulReload peut atteindre le même objectif, la différence est qu'elle ne terminera pas le thread de travail immédiatement, mais enverra un signal d'arrêt via IPC pour fermer toutes les connexions actuelles et gérer certaines tâches personnalisées, puis quittera gracieusement . Par exemple, le code suivant : Configurer PM2 pour qu'il démarre automatiquement Si vous souhaitez que PM2 exécute automatiquement l'application précédente après le redémarrage du serveur, vous pouvez d'abord démarrer votre application via pm2 start, puis exécutez la commande suivante : Cela générera un fichier dump.pm2 dans le répertoire ~/.pm2, qui décrit toutes les applications actuellement exécutées sur PM2. Exécutez ensuite la commande : Notez qu'il est nécessaire d'ajouter le paramètre optionnel platform pour informer clairement pm2 de l'environnement système actuel. De cette façon, au prochain redémarrage du serveur, PM2 exécutera automatiquement l'application précédemment enregistrée. Conclusion Le module Cluster est très puissant et l'utilisation de PM2 facilitera la tâche. À l'ère Node 0.10.x, cluster.js était encore un produit expérimental, mais à partir de Node 0.11.x, il a progressivement mûri et a commencé à se préparer pour la sortie officielle, y compris la version Node 0.12.x. Il est fortement recommandé d'utiliser les dernières versions de Node.js et PM2, les contributeurs de ces produits travaillent constamment dur pour les améliorer. Recommandations associées : Enregistrement complet de la construction du cluster Redis 10 articles recommandés sur le déploiement du cluster Une brève introduction au cluster mysql (photo) 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!process.on('message', function(msg) {
if (msg === 'shutdown') {
close_all_connections();
delete_cache();
server.close();
process.exit(0);
}
});
pm2 save
pm2 startup [platform]