12

node.js と http-proxy を使用して負荷分散をコーディングしようとしています。2 つのサーバー間で受信リクエストの処理を共有する loadBalancer が必要です。

var http = require('http'),
httpProxy = require('http-proxy');

var servers =  [{host :'127.0.0.1', port :3000}, {host : 'remote_adr',port :3000}];

httpProxy.createServer(function (req, res, proxy) {
    var target = servers.shift();
    proxy.proxyRequest(req, res, target);
    servers.push(target);
}).listen(8000);

こうすれば、serv1 と serv2 に交互にリクエストを送る loadBalancer になると思いました。

しかし、試してみると、2 つのサーバーを順不同で要求しているようです。さらに、ほとんどのリクエストは localhost ノード サーバー ( 127.0.0.1:3000 ) に送信されます。

誰かがその行動を説明できますか?

4

1 に答える 1

7

要求どおりにラウンド ロビンを実行する必要がありますが、これは非常に単純なラウンド ロビンです。favicon.ico リクエストが 1 つのサーバーに通常よりも高い割合でリクエストを送信している可能性があります。例えば。

Server 1: Actual Requests
Server 2: favicon.ico
Server 1: Another Request
Server 2: favicon.ico
Server 1: Final Request
Server 2: favicon.ico

したがって、ロギングの方法によっては、技術的には各サーバーが同じ数のリクエストを取得しているときに、サーバー 1 がすべてのリクエストを取得しているように見えます。また、ノードからアセットを提供している場合、アセットもラウンドロビンに含まれることに注意してください。そのため、各イメージまたはファイルのリクエストも異なるノード インスタンスに渡されます。

于 2012-11-29T00:00:20.170 に答える