如何在多台计算机中集群节点应用

时间:2017-02-10 09:53:21

标签: node.js express cluster-computing

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

现在我想连接所有机器并想要共享它们的内核,这样我的应用程序最终会有2 + 6 = 8个内核。怎么可能?是否有任何节点模块可用于实现此目的?感谢。

2 个答案:

答案 0 :(得分:12)

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

  1. 创建一个新的节点项目。
  2. 安装http-proxy模块。
  3. 新版本:

      

    npm install --save http-proxy

    如果您更喜欢旧版本:

      

    npm install --save http-proxy@0.8

    1. 创建一个新的js文件(server.js或任何你喜欢的东西)。
    2. 对于版本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. 您可以将本地主机更改为计算机的IP地址(和端口号)。
      4. 向8080端口发出请求的客户端并不知道8081,8082和8083处存在服务器。他们向8080发出请求,好像它是唯一的服务器并从中获得响应。

        现在,群集中的一台计算机将用作节点平衡器,而应用程序将托管在其他三台计算机上。负载均衡器的IP地址可以用作公共IP。

答案 1 :(得分:0)

节点的水平缩放可以通过多种方式完成:

  1. 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); 
    
  2. nginx

  3. 有关详细信息,请查看以下网址 Horizontal scaling for node js