web-dev-qa-db-ja.com

Node.jsアプリを複数のマシンにクラスター化する方法

私は Express jsNode-cluster を使用して、クラスタリングの利点を活用しています。また、プロセスとメモリの管理にも PM2 を使用しています。単一のマシンの場合は問題なく動作しますが、私のマシンには2つのコアがあり、より多くのコアを使用できるようにしたいと考えています。そこで、さらに3台のマシンに参加することを決定し、4台すべてのマシンがLANを使用して接続されました。 WebブラウザでもIPアドレスを使って他のマシンにアクセスできます。

次に、すべてのマシンを接続し、それらのコアを共有して、アプリケーションに最終的に2 + 6 = 8のコアを持たせたいと思います。どうすれば可能ですか?これを達成するために利用可能なノードモジュールはありますか?ありがとう。

13
Arpit Kumar

ノードクラスターはマルチコアプロセッサーを活用するのに適していますが、水平スケーリング(マシンの追加)に関しては、ロードバランサーまたはリバースプロキシを使用する必要があります。リバースプロキシについては、Apacheやnginxなどの任意のWebサーバーを使用できます。ノードとnpmに依存したい場合は、 nodejits :http-proxyによるモジュールがあります。以下は、ノードアプリを実行している3台のマシンのhttpプロキシの例です。

  1. 新しいノードプロジェクトを作成します。
  2. Http-proxyモジュールをインストールします。

新しいバージョン:

npm install --save http-proxy

古いバージョンを使用する場合:

npm install --save [email protected]

  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. LocalhostsをマシンのIPアドレス(およびポート番号)に変更できます。

8080ポートへの要求を行うクライアントは、8081、8082、および8083にあるサーバーの存在を認識していません。あたかもそれが唯一のサーバーであるかのように8080に要求を行い、そこから応答を受け取ります。

これで、クラスター内のマシンの1つがノードバランサーとして機能し、アプリケーションが他の3つのマシンでホストされます。ロードバランサーのIPアドレスをパブリックIPとして使用できます。

13
Sandesh K

ノードの水平スケーリングは複数の方法で行うことができます:

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

詳細については、以下のURLを確認してください ノードjsの水平スケーリング

0
Vora Ankit