web-dev-qa-db-fra.com

Comment mettre en cluster l'application Node.js sur plusieurs machines

J'utilise Express js et Node-cluster pour tirer parti du clustering J'utilise également PM2 pour la gestion des processus et de la mémoire. Pour une seule machine, cela fonctionne bien, mais ma machine ayant 2 cœurs et je veux mettre à disposition plus de cœurs. J'ai donc décidé de rejoindre 3 autres machines et maintenant les 4 machines sont connectées via LAN. Je peux également accéder aux autres machines en utilisant l'adresse IP dans le navigateur Web.

Maintenant, je veux connecter toutes les machines et partager leurs cœurs afin d'avoir enfin 2 + 6 = 8 cœurs pour mon application. Comment est-ce possible? Existe-t-il un module de nœud disponible pour y parvenir? Merci.

13
Arpit Kumar

Le cluster de nœuds est bon pour tirer parti des processeurs multicœurs, mais en ce qui concerne la mise à l'échelle horizontale (ajout de machines), vous devrez utiliser des équilibreurs de charge ou un proxy inverse. Pour le proxy inverse, vous pouvez utiliser n'importe quel serveur Web comme Apache ou nginx. Si vous souhaitez vous fier à node et npm, il existe un module par nodejits : http-proxy. Voici un exemple de proxy http pour 3 machines exécutant votre application de nœud.

  1. créer un nouveau projet de noeud.
  2. Installez le module proxy http.

Nouvelle version:

npm install --save http-proxy

Si vous préférez une version plus ancienne:

npm install --save [email protected]

  1. Créez un nouveau fichier js (server.js ou tout ce que vous voulez).

Pour la version 1.x.x (Nouveau)

server.js

var http = require('http'),
httpProxy = require('http-proxy');

var addresses = [
  {
    Host: "localhost",
    port: 8081
  },
  {
    Host: "localhost",
    port: 8082
  },
  {
    Host: "localhost",
    port: 8083
  }
];

//Create a set of proxy servers
var proxyServers = addresses.map(function (target) {
  return new httpProxy.createProxyServer({
    target: target
  });
});

var server = http.createServer(function (req, res) {
  var proxy = proxyServers.shift();

  proxy.web(req, res);

  proxyServers.Push(proxy);
});

server.listen(8080);

pour la version 0.x.x (ancienne)

server.js

var proxyServer = require('http-proxy');

var servers = [
  {
    Host: "localhost",
    port: 8081
  },
  {
    Host: "localhost",
    port: 8082
  },
  {
    Host: "localhost",
    port: 8083
  }
];

proxyServer.createServer(function (req, res, proxy) {
  var target = servers.shift();

  proxy.proxyRequest(req, res, target);
  servers.Push(target);
}).listen(8080);
  1. Exécutez maintenant ce fichier.
  2. Demande faite à localhost: 8080 sera acheminé vers 8081, 8082 ou 8083
  3. Vous pouvez changer les hôtes locaux en adresses IP de vos machines (et numéros de port).

Les clients faisant une demande au port 8080 ignorent l'existence des serveurs 8081, 8082 et 8083. Ils font des demandes à 8080 comme s'il s'agissait du seul serveur et obtiennent une réponse de celui-ci.

Désormais, l'une des machines de votre cluster fonctionnera comme équilibreur de nœuds et l'application est hébergée sur trois autres machines. L'adresse IP de l'équilibreur de charge peut être utilisée comme IP publique.

13
Sandesh K

La mise à l'échelle horizontale pour le nœud peut être effectuée de plusieurs manières:

  1. npm installe le proxy http

    var proxyServer = require('http-proxy');
    var port = parseInt(process.argv[2]);
    var servers = [
      {
        Host: "localhost",
        port: 8081
      },
      {
        Host: "localhost",
        port: 8080
      }
    ];
    
    proxyServer.createServer(function (req, res, proxy) {
      var target = servers.shift();
    
      proxy.proxyRequest(req, res, target);
      servers.Push(target);
    }).listen(port); 
    
  2. nginx

pour plus de détails, veuillez vérifier l'URL ci-dessous Mise à l'échelle horizontale pour le nœud js

0
Vora Ankit