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.
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.
Nouvelle version:
npm install --save http-proxy
Si vous préférez une version plus ancienne:
npm install --save [email protected]
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);
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.
La mise à l'échelle horizontale pour le nœud peut être effectuée de plusieurs manières:
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);
nginx
pour plus de détails, veuillez vérifier l'URL ci-dessous Mise à l'échelle horizontale pour le nœud js