如何在多台计算机上群集Node.js应用程序
我正在使用和利用集群,我还将其用于进程和内存管理。对于一台机器来说,它工作得很好,但是我的机器有两个内核,我想提供更多的内核。所以我决定再加入3台机器,现在所有4台机器都使用局域网连接。我也可以使用web浏览器中的IP地址访问其他机器如何在多台计算机上群集Node.js应用程序,node.js,express,cluster-computing,Node.js,Express,Cluster Computing,我正在使用和利用集群,我还将其用于进程和内存管理。对于一台机器来说,它工作得很好,但是我的机器有两个内核,我想提供更多的内核。所以我决定再加入3台机器,现在所有4台机器都使用局域网连接。我也可以使用web浏览器中的IP地址访问其他机器 现在我想连接所有的机器并共享它们的内核,这样我的应用程序将最终拥有2+6=8个内核。怎么可能呢?是否有任何节点模块可用于实现这一点?谢谢。节点的水平缩放可以通过多种方式完成: npm安装http代理 var proxyServer = require('http-
现在我想连接所有的机器并共享它们的内核,这样我的应用程序将最终拥有2+6=8个内核。怎么可能呢?是否有任何节点模块可用于实现这一点?谢谢。节点的水平缩放可以通过多种方式完成:
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);
节点集群有利于利用多核处理器,但当涉及到水平扩展(添加更多机器)时,您需要使用负载平衡器或反向代理。对于反向代理,您可以使用任何web服务器,如Apache或nginx。如果您希望依赖于节点和npm,那么有一个模块by:http proxy。下面是运行您的节点应用程序的3台机器的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);
如果您更喜欢旧版本:
npm安装--保存http-proxy@0.8
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);
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);
对于版本0.x.x(旧版)
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);
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);
现在,集群中的一台机器将充当节点平衡器,应用程序托管在其他三台机器上。负载平衡器的IP地址可以用作公共IP。谢谢,@Sandesh_k,我有Express js生成的应用程序文件夹结构,其中我在
bin
文件夹中有www
文件,该文件夹创建服务器并分配端口,那么我应该如何在www
文件中应用该代码?这只是一个代理服务器。。。它不需要是应用程序的一部分。。只需将其部署为一个独立的应用程序。。。它会将您的请求发送到多个主机上…@Sandesh_k,我应该如何通过浏览器发出请求?我是在http://127.0.0.1:8080
它应该先转到代理服务器,但t直接转到主服务器。向代理服务器发出请求。。。它会自动将您的请求路由到其中一个主机。。。这意味着,如果您的http代理在8080上运行,而应用程序主机在8081和8082上,请向8080发出请求,它会将它们路由到任何一台主机…@SandeshK感谢您的回答,如果我的一台服务器(例如端口3002)未启动或出现错误,我如何自动将请求重定向到另一台可用的服务器(即端口3001)?Arpit那么您是如何处理请求和不同进程之间的会话关联的?如果您有任何关于它的文章,请您告诉我简单的集群是有效的,但是会话管理和请求连续性被认为是问题所在