【问题标题】:Load balancing with node.js using http-proxy使用 http-proxy 与 node.js 进行负载平衡
【发布时间】:2012-11-16 13:08:27
【问题描述】:

我正在尝试使用 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)

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

【问题讨论】:

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


    【解决方案1】:

    这应该按照您的要求进行循环,但这是一个非常幼稚的循环。您可能会看到,您的 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 正在获取所有请求,而从技术上讲,每台服务器都获取相同数量的请求。另请记住,如果您从节点提供资产,您的资产也将包含在循环赛中。因此每个图像或文件请求也将被移交给不同的节点实例。

    【讨论】:

    • 很棒的解释。 favicon.ico 不是 node.js 吗?如果是,怎么处理的请求没有显示?
    • @Amareswar 不确定“favicon.ico 未被 node.js”击中是什么意思。 Node.js 当然可以处理 favicon 请求,但如果您只是在 express 中记录显式路由,您可能不会在日志中看到 favicon.ico 请求。
    • 知道了。这是我的疑问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2022-01-10
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多