我正在使用Express js和Node-cluster以利用羣集我還使用PM2進行進程和內存管理。對於單臺機器來說,它工作正常,但我的機器有2個內核,我想提供更多的內核。所以我決定加入3臺機器,現在所有4臺機器都使用LAN連接。我也可以在Web瀏覽器中使用IP地址訪問其他機器。如何在多臺機器上羣集節點應用程序
現在我想連接所有機器,並希望共享他們的內核,以便我的應用程序最終擁有2 + 6 = 8個內核。它怎麼可能?有沒有可用的節點模塊來實現這一點?謝謝。
我正在使用Express js和Node-cluster以利用羣集我還使用PM2進行進程和內存管理。對於單臺機器來說,它工作正常,但我的機器有2個內核,我想提供更多的內核。所以我決定加入3臺機器,現在所有4臺機器都使用LAN連接。我也可以在Web瀏覽器中使用IP地址訪問其他機器。如何在多臺機器上羣集節點應用程序
現在我想連接所有機器,並希望共享他們的內核,以便我的應用程序最終擁有2 + 6 = 8個內核。它怎麼可能?有沒有可用的節點模塊來實現這一點?謝謝。
節點集羣有利於採取多核心處理器的優勢,但是當涉及到橫向擴展(添加更多機器),您需要使用負載均衡器或反向代理。對於反向代理,您可以使用任何Web服務器,如Apache或nginx。如果你想依賴節點和npm,則有一個nodejitsu模塊:http-proxy。以下是運行節點應用程序的3臺機器的http代理示例。
新版本:
npm install --save http-proxy
如果你喜歡舊的版本:
npm install --save [email protected]
對於版本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);
向8080端口發出請求的客戶端並不知道服務器在8081,8082和8083處的存在。他們向8080發出請求,就好像它是唯一的服務器並從中獲得響應。
現在,集羣中的一臺機器將作爲節點平衡器工作,而應用程序託管在其他三臺機器上。負載平衡器的IP地址可以用作公共IP。
節點水平擴展可以以多種方式來完成:
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);
nginx的
更多細節請查看下面的網址 Horizontal scaling for node js
謝謝@Sandesh_k我有Express js生成的應用程序文件夾結構,我在'bin'文件夾中創建了服務器並指定了端口,因此我應該如何在'www'文件中應用此代碼? –
這只是一個代理服務器...它不需要成爲您的應用程序的一部分..只需將其部署爲一個獨立的應用程序...它會吐你的請求跨多個主機... –
@Sandesh_k,應該如何我通過瀏覽器發出請求?我在'http://127.0.0.1:8080'上發出請求,它應該首先到代理服務器,但是t直接到主服務器。 –