如何在多台机器上集群 Node.js 应用程序
How to cluster Node.js app in multiple machines
我正在使用 Express js and Node-cluster for taking the advantage of clustering I am also using PM2 进行进程和内存管理。对于一台机器,它工作正常,但我的机器有 2 个内核,我想提供更多内核。所以我决定再加入 3 台机器,现在所有 4 台机器都使用 LAN 连接。我也可以在网络浏览器中使用 IP 地址访问其他机器。
现在我想连接所有机器并共享它们的内核,以便我的应用程序最终拥有 2 + 6 = 8 个内核。怎么可能?是否有任何节点模块可用于实现此目的?谢谢
节点的水平缩放可以通过多种方式完成:
npm 安装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
更多详情请查看下方URL
Horizontal scaling for node js
Node-cluster 有利于利用多核处理器,但在横向扩展(添加更多机器)方面,您需要使用负载平衡器或反向代理。对于反向代理,您可以使用任何 Web 服务器,如 Apache 或 nginx。如果你想依赖 node 和 npm,nodejitsu 有一个模块:http-proxy。这是 3 台机器的 http 代理的示例 运行ning 您的节点应用程序。
- 创建一个新的节点项目。
- 安装http-proxy模块。
新版本:
npm install --save http-proxy
如果您喜欢旧版本:
npm install --save http-proxy@0.8
- 创建一个新的 js 文件(server.js 或您喜欢的任何文件)。
对于版本 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);
- 现在运行这个文件。
- 对 localhost:8080 的请求将被路由到 8081、8082 或 8083
- 您可以将本地主机更改为您机器的 IP 地址(和端口号)。
向 8080 端口发出请求的客户端不知道 8081、8082 和 8083 上的服务器的存在。他们向 8080 发出请求,就好像它是唯一的服务器一样,并从它那里得到响应。
现在,您集群中的一台机器将作为节点平衡器工作,应用程序托管在其他三台机器上。负载均衡器的 IP 地址可以用作 public IP。
我正在使用 Express js and Node-cluster for taking the advantage of clustering I am also using PM2 进行进程和内存管理。对于一台机器,它工作正常,但我的机器有 2 个内核,我想提供更多内核。所以我决定再加入 3 台机器,现在所有 4 台机器都使用 LAN 连接。我也可以在网络浏览器中使用 IP 地址访问其他机器。
现在我想连接所有机器并共享它们的内核,以便我的应用程序最终拥有 2 + 6 = 8 个内核。怎么可能?是否有任何节点模块可用于实现此目的?谢谢
节点的水平缩放可以通过多种方式完成:
npm 安装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
更多详情请查看下方URL Horizontal scaling for node js
Node-cluster 有利于利用多核处理器,但在横向扩展(添加更多机器)方面,您需要使用负载平衡器或反向代理。对于反向代理,您可以使用任何 Web 服务器,如 Apache 或 nginx。如果你想依赖 node 和 npm,nodejitsu 有一个模块:http-proxy。这是 3 台机器的 http 代理的示例 运行ning 您的节点应用程序。
- 创建一个新的节点项目。
- 安装http-proxy模块。
新版本:
npm install --save http-proxy
如果您喜欢旧版本:
npm install --save http-proxy@0.8
- 创建一个新的 js 文件(server.js 或您喜欢的任何文件)。
对于版本 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);
- 现在运行这个文件。
- 对 localhost:8080 的请求将被路由到 8081、8082 或 8083
- 您可以将本地主机更改为您机器的 IP 地址(和端口号)。
向 8080 端口发出请求的客户端不知道 8081、8082 和 8083 上的服务器的存在。他们向 8080 发出请求,就好像它是唯一的服务器一样,并从它那里得到响应。
现在,您集群中的一台机器将作为节点平衡器工作,应用程序托管在其他三台机器上。负载均衡器的 IP 地址可以用作 public IP。