gpt4 book ai didi

node.js - 如何在多台机器上集群 Node.js 应用程序

转载 作者:IT老高 更新时间:2023-10-28 23:10:48 25 4
gpt4 key购买 nike

我正在使用 Express jsNode-cluster为了利用集群,我也在使用 PM2用于进程和内存管理。对于单台机器,它工作正常,但我的机器有 2 个内核,我想提供更多内核。所以我决定再加入 3 台机器,现在所有 4 台机器都使用 LAN 连接。我也可以在网络浏览器中使用 IP 地址访问其他机器。

现在我想连接所有机器并希望共享它们的内核,这样我的应用程序最终将拥有 2 + 6 = 8 个内核。怎么可能?有没有可用的 Node 模块来实现这一点?谢谢。

最佳答案

Node-cluster 可以很好地利用多核处理器,但是当涉及到水平扩展(添加更多机器)时,您需要使用负载平衡器或反向代理。对于反向代理,您可以使用任何 Web 服务器,如 Apache 或 nginx。如果你想依赖node和npm,有一个模块nodejitsu :http代理。这是运行您的 Node 应用程序的 3 台机器的 http 代理示例。

  1. 创建一个新的 Node 项目。
  2. 安装 http-proxy 模块。

新版本:

npm install --save http-proxy

如果您更喜欢旧版本:

npm install --save http-proxy@0.8

  1. 创建一个新的 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);
  1. 现在运行这个文件。
  2. 对 localhost:8080 的请求将被路由到 8081、8082 或 8083
  3. 您可以将 localhost 更改为您机器的 IP 地址(和端口号)。

向 8080 端口发出请求的客户端不知道 8081、8082 和 8083 存在服务器。他们向 8080 发出请求,就好像它是唯一的服务器一样,并从中获得响应。

现在,您集群中的一台机器将作为 Node 平衡器工作,而应用程序托管在其他三台机器上。负载均衡器的IP地址可以作为公网IP。

关于node.js - 如何在多台机器上集群 Node.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com