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 pour y jeter un œil, j'espère que cela pourra aider tout le monde.
Introduction
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.
Module cluster 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 de base :
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, et le nombre de threads n'est pas limité aux cœurs du processeur Le nombre, car il s'exécute simplement comme un sous-thread 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 à faire toute modification du 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 cours d'exécution 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 :
process.on('message', function(msg) { if (msg === 'shutdown') { close_all_connections(); delete_cache(); server.close(); process.exit(0); } });
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écuter la commande suivante :
pm2 save
Cela générera un fichier dump.pm2 dans le ~/.pm2 répertoire, décrit dans Toutes les applications actuellement exécutées sur PM2. Exécutez ensuite la commande :
pm2 startup [platform]
A noter 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 :
Analyse de l'échec du cluster Redis
Tutoriel graphique de construction de cluster Redis
Tutoriel de construction de cluster Redis et problèmes rencontrés Gestion des problèmes
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!