文档章节

服务器负载感知的URL HASH

mac_zhao
 mac_zhao
发布于 2015/06/23 15:00
字数 1272
阅读 459
收藏 2

码上生花,ECharts 作品展示赛正式启动!>>>

负载均衡设备的URL哈希(HASH)功能主要应用在两种场合:

1. 大型网站。大型网站为了提高访问速率,将视频和图片等可缓存的内容缓存到CDN节点。每个CDN节点有很多台缓存服务器,前端配置负载均衡器进行流量分 担。为了提高缓存服务器的存储效率和命中率,负载均衡器通常选择URL HASH算法分配流量到缓存服务器。正常的情况下,不同缓存服务器所缓存内容是不同的,而相同URL的访问一定会到达同一台缓存服务器。

2. 互联网出口。可以是运营商城域网出口,也可以是大型企业的出口。为了提高访问速度,负载均衡设备与缓存配合将视频和图片等静态内容缓存到本地。与网站应用类似,URL HASH可以提高缓存效率和命中率。

下图是一个简单的URL HASH示例,该例子只使用最后3个字节计算HASH值,结果就是不同后缀的文件分布在不同服务器。实际应用中通常使用较长url或整个URL计算HASH值。

image

在有些负载均衡器的HASH算法中,增加或减少服务器会导致整个内容重新分布,所有缓存服务器原来存储的内容大部分失效,需要重新下载。这会大大影 响用户体验。在A10的HASH负载均衡算法中,除了根据url计算出hash值外,还要根据服务器IP地址和HASH值计算一个分数。分数最高的服务器 将被选作该HASH值对应使用的服务器。当增加或减少服务器时,只需要重新计算HASH值对应服务器的分数并更新HASH表即可。如下表所示,服务器正常 时,HASH值H1,H2,H3分别对应服务器S1,S2,S3。当服务器S1宕机或删除后,HASH表将更新HASH值H1对应的服务器为分数次高的 S2,这部分访问就被分流到S2,而HASH值为H2和H3的流量不会受影响,仍然分配到原来的服务器。HASH值的数量远大于服务器数量,而每个 HASH值对应不同服务器的分数有可能不同,因此,去除一台服务器时,其对应的多个HASH值基本可以平均分散到其它服务器。

服务器\HASH值 H1 H2 H3
S1 100 60 80
S2 80 100 60
S3 60 80 100

 

上面这种HASH算法在消耗很少资源的情况下保证了服务器增减不会引起大面积内容重新分布。但在极端情况下,受HASH本身算法设计限制,还是会有 一些问题产生。由于HASH保证了内容的分散,但对每个url的访问量并没有考虑进去。比如当一些热门事件发生时,个别热点链接会超过该HASH值对应服 务器的服务能力。这种情况下就需要负载均衡器可以和服务器配合,根据服务器的负担对HASH流量进行相应处理。A10根据用户需求开发了服务器负担感知的 HASH算法。其工作原理如下:

1. 服务器根据自身负担情况,在HTTP响应头中插入“Server-Status”字段,该字段的值为0、1或2。

2. 负载均衡器根据”Server-Status“反应的服务器负担,进行相应的流量调整。具体处理方式如下:

服务器状态 字段含义 负载均衡器措施
0
  • 服务器可以处理属于自己的流量
  • 也可以协助其它服务器处理流量
  • 负载均衡器正常处理该服务器对应的HASH值的流量
  • 如需要协助其它服务器处理流量
1
  • 服务器可以处理属于自己的流量
  • 但无能力协助其它服务器处理流量
  • 负载均衡器正常处理该服务器对应的HASH值的流量
  • 不会使用该服务器协助其它服务器处理流量
2
  • 服务器已经过载需要其它服务器协助
  • 至少需要另外1台状态为0的服务器进行轮询分配流量
  • 负载均衡器使用所有状态为0的服务器轮询分担该服务器的流量
  • 如没有服务器状态为0,则轮询分担流量到所有服务器

 

A10通过使用这种具有服务器负载感知的HASH算法,缓存部署碰到的问题基本得以解决。这也是越来越多缓存厂家希望与功能丰富的负载均衡厂商配合的原因之一,而不是缓存独立部署或者使用WCCP等方式引导流量。

© 著作权归作者所有

mac_zhao
粉丝 41
博文 249
码字总数 304671
作品 0
普陀
程序员
私信 提问
加载中
请先登录后再评论。
nginx的概念与几种负载均衡算法

Nginx的背景 Nginx和Apache一样都是一种WEB服务器。基于REST架构风格,以URI(Uniform Resources Identifier,统一资源描述符)或URL(Uniform Resources Locator,统一资源定位符)作为沟通...

osc_tw1uh2ye
2019/04/27
1
0
浅谈通信网络(六)——防火墙和负载均衡器

粒度: 交换机(二层):目的MAC地址 路由器(三层):目的IP地址 防火墙和负载均衡器(四层):会话 会话的标记为:从同一个域到域的数据流,以第一个SYN数据包的源和目的IP地址及其源和目的...

osc_bnzpjhof
2019/03/03
1
0
openstack octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比

【负载均衡】 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应。 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回。...

osc_syqp8xt3
04/16
8
0
nginx upstream的分配方式

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除(这是默认的方式,轮训机制确保每台被负载的机器的请求数差不多)。 2、weight 指定轮询...

浮躁的码农
2015/06/29
21
0
Nginx服务器之负载均衡策略(6种)

一、关于Nginx的负载均衡   在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一篇...

左羽
2018/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HashMap解析(主要JDK1.8,附带1.7出现的问题以及区别)

按问题的形式来吧,这些大多是我自己总结的,如有错误请及时指正谢谢 1.你了解HashMap么,可以说说么?   首先,HashMap是一种数据结构,可以快速的帮我们存取数据。它的底层数据结构在1.7...

osc_gzy7qjj6
22分钟前
12
0
CentOS8.1操作系下使用通用二进制包安装MySQL8.0(实践整理自MySQL官方)

  写在前的的话: 在IT技术日新月异的今天,老司机也可能在看似熟悉的道路上翻车,甚至是大型翻车现场!自己一个人开车过去翻个车不可怕,可怕的是带着整个团队甚至是整个公司一起翻车山崖...

osc_494omtst
23分钟前
8
0
关于对健壮性代码的理解

这两天学到了很多知识,对项目的严密性有了极为深刻的理解,简而言之,身为前端开发者要站在用户的角度去写相关代码,而不能仅仅局限于理所当然,也不可以认为数据有便有,没有便没有,身为开...

osc_47pscir3
24分钟前
13
0
【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&指定扫描规则

写在前面 在实际项目中,我们更多的是使用Spring的包扫描功能对项目中的包进行扫描,凡是在指定的包或子包中的类上标注了@Repository、@Service、@Controller、@Component注解的类都会被扫描...

osc_a5w6ccj0
26分钟前
10
0
学习c++ (五) 用duilib 编写界面

还是那句话,不想用MFC,写的界面丑,不想依赖MFC的一些库,在网上闲逛,发现duilib还可以,至于QT,有时间再研究, dulib已经没人更新了,估计也是翻不出什么花样了,但研究一下总算是C++的...

osc_jklrr90y
26分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部