文档章节

服务器负载感知的URL HASH

mac_zhao
 mac_zhao
发布于 2015/06/23 15:00
字数 1272
阅读 369
收藏 2
点赞 0
评论 0

负载均衡设备的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 upstream的分配方式

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

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

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

左羽
昨天
0
0
Nginx负载均衡5种配置方式

nginx 负载均衡5种配置方式 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后...

光斑
04/18
0
0
nginx 负载均衡5种方式及其服务器几种状态

轮询 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. uptream backend{ server 192.168.200.156:8080; server 192.168.200.157:8080; server 192.168.2...

科技小能手
2017/11/12
0
0
Nginx upstream 的几种分配方式

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 ...

大数据之路
2013/02/23
0
0
nginx 负载均衡 5种方式(转载)

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 ...

袁跃平
2012/09/24
0
0
nginx配置介绍

下面是Nginx配置文件的格式如下: mainevents { ....}http { .... upstream myproject { ..... } server { .... location { .... } } server { .... location { .... } } ....} nginx配置文件......

irow10
2017/03/24
0
0
nginx 负载均衡 5种方式

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 ...

lebwade
2012/07/24
0
0
nginx upstream的五种分配方式

nginx的upstream目前支持5种方式的分配 1、轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight   指定轮询几率,weight和访问...

mickelfeng
2013/01/17
0
0
有关nginx upstream的几种配置方式

nginx的upstream目前支持4种方式的分配 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正...

山哥
2011/10/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
10分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
15分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
18分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
26分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
29分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
30分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
33分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
36分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
36分钟前
0
0
Nginx配置error_page 404 500等自定义的错误页面

Nginx 做web server时, 开发中发现有时候的网站代码有错误,我们需要跳转到一个指定内容的错误页面: 1. 在nginx.conf配置文件上加上一句: fastcgi_intercept_errors on; 2. 服务中加上: er...

MichaelShu
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部