Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在多台计算机上群集Node.js应用程序_Node.js_Express_Cluster Computing - Fatal编程技术网

如何在多台计算机上群集Node.js应用程序

如何在多台计算机上群集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-

我正在使用和利用集群,我还将其用于进程和内存管理。对于一台机器来说,它工作得很好,但是我的机器有两个内核,我想提供更多的内核。所以我决定再加入3台机器,现在所有4台机器都使用局域网连接。我也可以使用web浏览器中的IP地址访问其他机器


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

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

  • npm安装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); 
    
  • nginx

  • 有关更多详细信息,请查看以下URL

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

  • 创建一个新的节点项目
  • 安装http代理模块
  • 新版本:

    npm安装--保存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

  • 创建一个新的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);
    
    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);
    
  • 现在运行这个文件
  • 向localhost:8080发出的请求将路由到8081、8082或8083
  • 您可以将本地主机更改为计算机的IP地址(和端口号)
  • 向8080端口发出请求的客户端不知道8081、8082和8083上存在服务器。他们向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那么您是如何处理请求和不同进程之间的会话关联的?如果您有任何关于它的文章,请您告诉我简单的集群是有效的,但是会话管理和请求连续性被认为是问题所在