使用http-proxy与node.js进行负载均衡

时间:2012-11-28 15:58:24

标签: node.js load-balancing node-http-proxy

我正在尝试使用node.js和http-proxy编写负载均衡代码。我想要一个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)

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

1 个答案:

答案 0 :(得分: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将获得所有请求。另请注意,如果您从节点为其提供服务,您的资产也将包含在循环中。因此,每个图像或文件请求也将被移交给不同的节点实例。