Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

haproxy的hash算法相关

$
0
0
haproxy支持多种负载均衡算法,分别对应用于多种应用场景下。
在CDN的cache server这种后端大多数是分发静态文件的场景下,也需要一些特定的负载均衡算法。

将haproxy放置在cache server的前端的理由有很多,实际好处包括:
SSL offloading
HTTP 7层交换
高级负载均衡算法

1.haproxy如何实现Content Switching,即7层交换

客户端连接到haproxy定义的frontend上,haproxy根据指定的负载均衡算法,将请求路由到后端的backend(服务器群)中的一台服务器。
一个Frontend可以指定多个backend,可以通过ACL和use_backend规则来选择。
ACL可以使用各种fetch,fetch是haproxy的一个指令,用来指示haproxy从何处抽取数据。

2.实现最基本的动静态分离

frontend ft_public
 [前端相关配置.......]
 acl static_domain  req.hdr_beg(Host) -i static. images.
 acl static_content path_end  -i .jpg .png .gif .css .js
 use_backend bk_static if static_domain or static_content
 default_backend bk_dynamic
   
backend bk_static
[后端相关配置......] 

上边配置可以实现:
匹配所有域名是以‘static.’ 和 ‘images.’开头
匹配所有文件扩展名是‘.jpg’ ‘.png’ ‘.gif’ ‘.css’ ‘.js’
只要匹配上述两条规则中的任何一条,即可视为静态内容,则使用后端bk_static
其他不匹配上述规则的请求都视为动态内容,使用后端bk_dynamic

3.haproxy的hash相关算法
当计算一个hash算法时,以下因素会影响计算结果:
后端服务器群中的服务器数量
群中每个服务器的权重
服务器的状态(UP 或 DOWN)

如果上述因素中的任何一个发生改变,那么整个hash结果会重新计算,此后的请求会发送到不同的服务器上。这个过程尽管很短,但在高并发环境下还是有很大负面影响。
幸运的是,haproxy支持一致性hash(consistent hashing),在这种条件下,只有跟改变的因素相关的流量才会受到影响,关于一致性hash,可以自行google。
在haproxy配置中,使用指令hash-type consistent 指定一致性hash。 


4.hash的多种常见用法

a.仅针对URL path做hash,即从第一个斜杠“/”开始,一直到问号“?”中间的部分
backend bk_static
  balance uri
  hash-type consistent

b.针对整个URL做hash,即包括查询串
backend bk_static
  balance uri whole
  hash-type consistent

c.针对查询参数做hash,假设URL为“/image.php?width=512&id=12&height=256”,针对id参数做hash
这样做的好处是,可以不用管对应参数的顺序位置。
backend bk_static
  balance url_param id
  hash-type consistent

d.针对特定的HTTP header做hash
backend bk_static
  balance hdr(Host)
  hash-type consistent

e.构造我们自己的hash
haproxy非常灵活,我们可以构建自己的hash。假设后端的vanish中,使用了请求的host主机头和URI来存储一个hash key
那么在前端我们也可以使用对应的算法,来优化cache的命中率。

以下的配置将主机头中的host和请求的URI都转换为小写,将这两个变量连接在一起,形成一个新的header,叫做X-LB
然后haproxy基于这个X-LB做hash

backend bk_static
  http-request set-header X-LB %[req.hdr(Host),lower]%[req.uri,lower]
  balance hdr(X-LB)
  hash-type consistent

原文地址:https://www.haproxy.com/blog/haproxys-load-balancing-algorithm-for-static-content-delivery-with-varnish/


 

Viewing all articles
Browse latest Browse all 55

Trending Articles