Maison  >  Article  >  interface Web  >  PM2 facilite la mise en œuvre du clustering Node.js

PM2 facilite la mise en œuvre du clustering Node.js

小云云
小云云original
2018-01-18 16:48:411244parcourir

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&#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, 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(&#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 b17cb6f689edd7d45fa1f8fe627ef1f1 Le paramètre est utilisé pour indiquer à PM2 d'exécuter votre application en cluster_mode (appelé en conséquence fork_mode). 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 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 fea7f843ba94ea24cc55a4dbad54635a. Le paramètre 751fecf49c9d13ca89ee2cbb9b75d4f6 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 fea7f843ba94ea24cc55a4dbad54635a 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(&#39;message&#39;, function(msg) { 
 if (msg === &#39;shutdown&#39;) {
  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!

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