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);

我认为这样做会使 loadBalancer 交替向 serv1 和 serv2 发送请求。

但是,当我尝试时,它似乎以没有特定顺序请求 2 个服务器。此外,大部分请求都发送到我的 localhost 节点服务器( 127.0.0.1:3000 )

有人能够解释这种行为吗?

4

1 回答 1

7

那应该按照您的要求进行循环,但这是一个非常幼稚的循环。您可能会看到,您的 favicon.ico 请求在单个服务器上的请求份额高于正常份额。例如。

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 回答