我正在使用Express js和Node-cluster来利用群集我还使用PM2进行进程和内存管理。对于一台机器,它工作正常,但我的机器有2个核心,我想提供更多的核心。所以我决定加入另外3台机器,现在所有4台机器都使用LAN连接。我也可以在网络浏览器中使用IP地址访问其他机器。
现在我想连接所有机器并想要共享它们的内核,这样我的应用程序最终会有2 + 6 = 8个内核。怎么可能?是否有任何节点模块可用于实现此目的?感谢。
答案 0 :(得分:12)
节点集群有利于利用多核处理器,但是当涉及水平扩展(添加更多计算机)时,您需要使用负载平衡器或反向代理。对于反向代理,您可以使用任何Web服务器,如Apache或nginx。如果你想依赖node和npm,那么nodejitsu就有一个模块:http-proxy。以下是运行节点应用程序的3台计算机的http代理示例。
新版本:
npm install --save http-proxy
如果您更喜欢旧版本:
npm install --save http-proxy@0.8
对于版本1.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);
版本0.x.x(旧)
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);
向8080端口发出请求的客户端并不知道8081,8082和8083处存在服务器。他们向8080发出请求,好像它是唯一的服务器并从中获得响应。
现在,群集中的一台计算机将用作节点平衡器,而应用程序将托管在其他三台计算机上。负载均衡器的IP地址可以用作公共IP。
答案 1 :(得分:0)
节点的水平缩放可以通过多种方式完成:
npm install http-proxy
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
有关详细信息,请查看以下网址 Horizontal scaling for node js