2017-02-10 47 views
5

我正在使用Express jsNode-cluster以利用羣集我還使用PM2進行進程和內存管理。對於單臺機器來說,它工作正常,但我的機器有2個內核,我想提供更多的內核。所以我決定加入3臺機器,現在所有4臺機器都使用LAN連接。我也可以在Web瀏覽器中使用IP地址訪問其他機器。如何在多臺機器上羣集節點應用程序

現在我想連接所有機器,並希望共享他們的內核,以便我的應用程序最終擁有2 + 6 = 8個內核。它怎麼可能?有沒有可用的節點模塊來實現這一點?謝謝。

回答

7

節點集羣有利於採取多核心處理器的優勢,但是當涉及到橫向擴展(添加更多機器),您需要使用負載均衡器或反向代理。對於反向代理,您可以使用任何Web服務器,如Apache或nginx。如果你想依賴節點和npm,則有一個nodejitsu模塊:http-proxy。以下是運行節點應用程序的3臺機器的http代理示例。

  1. 創建一個新的節點項目。
  2. 安裝http-proxy模塊。

新版本:

npm install --save http-proxy

如果你喜歡舊的版本:

npm install --save [email protected]

  • 創建一個新的js文件(server.js或任何你喜歡)。
  • 對於版本1.x.x(新)

    服務器。JS

    ​​3210

    爲版本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
  • 您可以將localhosts更改爲您機器的IP地址(和端口號)。
  • 向8080端口發出請求的客戶端並不知道服務器在8081,8082和8083處的存在。他們向8080發出請求,就好像它是唯一的服務器並從中獲得響應。

    現在,集羣中的一臺機器將作爲節點平衡器工作,而應用程序託管在其他三臺機器上。負載平衡器的IP地址可以用作公共IP。

    +0

    謝謝@Sandesh_k我有Express js生成的應用程序文件夾結構,我在'bin'文件夾中創建了服務器並指定了端口,因此我應該如何在'www'文件中應用此代碼? –

    +0

    這只是一個代理服務器...它不需要成爲您的應用程序的一部分..只需將其部署爲一個獨立的應用程序...它會吐你的請求跨多個主機... –

    +0

    @Sandesh_k,應該如何我通過瀏覽器發出請求?我在'http://127.0.0.1:8080'上發出請求,它應該首先到代理服務器,但是t直接到主服務器。 –

    0

    節點水平擴展可以以多種方式來完成:

    1. NPM安裝HTTP代理

      代碼 變種訪問代理服務器=要求( 'HTTP代理'); var port = parseInt(process.argv [2]); VAR服務器= [{ 主機 : 「本地主機」, 端口:8081 },{ 主機 : 「本地主機」, 端口:8080 } ];

      proxyServer.createServer(功能(REQ,RES,代理){ VAR目標= servers.shift();

      proxy.proxyRequest(REQ,RES,目標); servers.push(目標); })。listen(port);

    2. nginx的

    更多細節請查看下面的網址 Horizontal scaling for node js

    相關問題