Maison  >  Article  >  interface Web  >  Comment faciliter le clustering Node.js avec PM2

Comment faciliter le clustering Node.js avec PM2

小云云
小云云original
2017-12-21 09:19:301718parcourir

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&#39;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(&#39;http&#39;);

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 PM2 pour exécuter votre application sous la forme cluster_mode (le nom correspondant est fork_mode), et le nombre suivant indique le nombre de threads de travail à démarrer. Si le nombre donné est 0, PM2 générera les threads de travail correspondants en fonction du nombre de cœurs de votre processeur.

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 . Le paramètre spécifie le nombre de threads de travail et est utilisé pour augmenter ou diminuer le nombre de clusters. Vous pouvez également spécifier le nombre de threads de travail à ajouter via l'application pm2 scale +3.

Réalisation de mises à jour sans temps d'arrêt dans l'environnement de production

La fonction de rechargement de PM2 redémarrera tous les threads de travail dans l'ordre. Chaque thread attendra la création d'un nouveau thread avant d'être terminé. Ainsi, lorsque vous déployez un nouveau code dans un environnement de production, le serveur continuera à fonctionner sans interruption.

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écutez la commande suivante :

pm2 save

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 :

pm2 startup [platform]

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn