HAProxy 能否确定后端服务器的负载并避免将请求发送到负载较高的服务器?

HAProxy 能否确定后端服务器的负载并避免将请求发送到负载较高的服务器?

我想知道了解每个后端服务器的 loadavg 并要求 HAProxy 将下一个请求发送到 loadavg 最低的计算机是否有优势。

但是,我还没有看到任何可以在 HAProxy 中提供此功能的东西。也许它不可用?

我已经发现这个帖子它显示了带有命令的前端定义use_backend,但我认为该映射将被加载一次并在整个 HAProxy 运行期间缓存。换句话说,动态更改映射并按 loadavg 对项目进行排序不会产生任何影响...

frontend ft_items
  [...]
  use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]

我不确定 roundrobin 是否适合我的应用程序,因为有些请求需要 50 毫秒(图像、CSS 等),而其他请求可能需要 2 秒(大型报告)。因此,检查计算机的 loadavg 似乎更适合此应用程序。

答案1

亚历克西斯,

这听起来就像代理检查旨在用于。 Willy 好心地添加了我们用于 Loadbalancer.org 设备的补丁,并且我们已经开源了基于 Windows 的服务器代理。 包括基本 Linux 服务器示例的说明如下:

https://www.loadbalancer.org/blog/open-source-windows-service-for-reporting-server-load-back-to-haproxy-load-balancer-feedback-agent

Windows 代理可以监控 CPU、RAM 和 TCP 连接数的组合(即 RDP 会话)。

我们欢迎大家提供反馈。这让我想起——如果有人能实现某种服务器响应时间算法就好了,那么你就不一定需要基于服务器的代理了。

答案2

您最好将 HAProxy 映射分解,以便对静态资源的快速请求通过一个循环映射进行,而较慢的请求通过不同的 RR 映射进行。

您可以对请求使用相同或不同的后端池,其理念是,平均而言,所有服务器处理相同数量的快速和慢速请求。或者,您可以将它们映射到不同的后端系统,并使用更强大的系统来处理计算密集型的报告工作。

相关内容