Citrix Netscaler负载均衡算法
Citrix Netscaler负载均衡算法
http://blog.51cto.com/caojin/1926308
众所周知,作为新一代应用交付产品的Citrix Netscaler具有业内领先的数据控制、应用交付的能力,然而作为根本内容之一的ADC功能,如果不具备强大的、多元化的均衡算法是不可能适应如此众多的应用场景,更无法做到好的应用交付产品。因此我们在此讨论一下比较常用的负载均衡算法就很有必要。
目前最新版本的Netscaler支持17种均衡算法,目前先讨论最常用的12种
1、轮询算法(Round Robin)
当NetScaler 使用轮询的负载均衡算法时,它会将来自客户端的请求轮流分配给后台中的服务器,从1开始,直到N(后台服务器个数),然后重新开始循环。
如果考虑后台服务器的处理能力不同,可以给每个服务器分配不同的权值,通过设置权重比率来调整循环调度的机率。
2、最少连接算法(Least Connection)
当NetScaler 使用最小连接的负载均衡算法时,它是把新的连接请求分配到当前连接数最小的服务器。最小连接算法是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。系统会记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器时,其连接数加1,当连接中止,其连接数减一。
如果考虑后台服务器的处理能力不同,也可以给每个服务器分配不同的权值,通过设置权重比率来调整最小连接算法的调度机率。
3、最少响应时间
当NetScaler 使用最小响应时间的负载均衡算法时,它是把新的连接请求分配到当前连接数最小并且平均响应时间最小的服务器。最小响应时间算法的调度因素实际上有两个部分组成,即当前每服务器上的最小连接数和每服务器的平均响应时间(这里的平均响应时间为TTFB,即第一个字节到达的时间,对于Http协议为response code为200的第一个字节数据返回的时间),这两个因子的乘积做为算法调度的判断依据。最新的连接请求将被发送到最小连接数和平均响应时间乘积最小的服务器。
如果考虑后台服务器的处理能力不同,也可以给每个服务器分配不同的权值,通过设置权重比率来调整最小享用时间算法的调度机率。
4、最小带宽算法(Least Bandwidth)
当NetScaler 使用最小带宽的负载均衡算法时,它是把新的连接请求分配到当前流量吞吐(单位为bps)最小的服务器。
如果考虑后台服务器的处理能力不同,也可以给每个服务器分配不同的权值,通过设置权重比率来调整最小带宽算法的调度机率。
5、最少数据包算法(Least Packets)
当NetScaler 使用最少数据包的负载均衡算法时,它是把新的连接请求分配到数据包最少的服务器。计算最小数据包的方法是过去14秒每个服务器上处理的数据包数量。
如果考虑后台服务器的处理能力不同,也可以给每个服务器分配不同的权值,通过设置权重比率来调整最少数据包算法的调度机率。
6、令牌算法(Token)
当NetScaler 使用令牌负载均衡算法时,它分发新的连接请求将依据客户端请求中所附带的令牌(Token)信息,具备相同令牌的请求将会分配到相同的后台服务器。令牌算法是一种基于内容信息的调度算法,NetScaler可设置令牌(Token)所在的位置和尺寸,这样通过搜索到相同的令牌,而将请求发往相同的后台服务器。
令牌算法可以应用到TCP、http和Https服务类型,甚至可以实现不同的服务之间的唯一性。对于Http/Https协议,令牌(Token)可以在Http header或URL或Http body中取得。Netscaler可以在TCP Payload前最多24K字节中搜索配置的Token,如果是非Http服务,Netscaler可以在最多前16个数据包中中搜索配置的令牌(Token),但不能超过24K字节。
7、URL Hash算法
URL散列(Hash)负载均衡算法常用于缓存(Cache)环境,当NetScaler 使用URL散列(Hash)负载均衡算法时,NetScaler通过一个散列(Hash)函数将此连接请求的URL信息进行计算并将计算值缓存在系统中,同时映射到后台某个服务器。随后基于URL信息做为散列键(Hash Key)进行Hash计算得到相同值的请求,均发送到这个后台服务器。
8、域名 Hash算法
当NetScaler 使用域名散列(Hash)负载均衡算法时,NetScaler通过一个散列(Hash)函数将此连接请求的域名(Domain)信息进行计算并将计算值缓存在系统中,同时映射到后台某个服务器。随后基于域名信息做为散列键(Hash Key)进行Hash计算得到相同值的请求,均发送到这个后台服务器。
9、源IP地址 Hash算法
当NetScaler 使用源IP地址散列(Hash)负载均衡算法时,NetScaler通过一个散列(Hash)函数将此连接请求的源IP地址信息进行计算并将计算值缓存在系统中,同时映射到后台某个服务器。随后基于源IP地址做为散列键(Hash Key)进行Hash计算得到相同值的请求,均发送到这个后台服务器。
10、目的IP地址Hash算法
当NetScaler 使用目的IP地址散列(Hash)负载均衡算法时,NetScaler通过一个散列(Hash)函数将此连接请求的目的IP地址信息进行计算并将计算值缓存在系统中,同时映射到后台某个服务器。随后基于目的IP地址做为散列键(Hash Key)进行Hash计算得到相同值的请求,均发送到这个后台服务器。
11、源IP和目的IP地址 hash算法
当NetScaler 使用源IP和目的IP地址散列(Hash)负载均衡算法时,NetScaler通过一个散列(Hash)函数将此连接请求的源IP地址和目的IP地址信息进行计算并将计算值缓存在系统中,同时映射到后台某个服务器。随后基于源IP地址和目的IP地址做为散列键(Hash Key)进行Hash计算得到相同值的请求,均发送到这个后台服务器。
源IP地址和目的IP地址散列(Hash)算法常应用在防火墙集群负载均衡环境中,它们可以保证流量出入的唯一性。
12、自定义的基于SNMP的判断算法(Custom Load)
当NetScaler 使用自定义负载均衡算法时,NetScaler按照自定义策略通过SNMP协议获取相关服务器运行参数,例如CPU利用率、内存使用、服务器连接和响应时间等多种信息,最终通过预先策略设定的参数矩阵(metric)来决定新的连接请求发送给哪一台后台服务器。
也许有人会问怎么Netscaler不支持加权算法?在其他ADC里面加权会作为一种单独的算法出现,也就只能支持一两种而已。但是在Netscaler,加权是在service的设定,会和其他已有的算法结合,从某种程度上讲就变成更多的算法,也就变成了12+12加权=24种均衡算法。下面仅以最小连接的加权来讨论
最小连接数
当NetScaler 使用最小连接的负载均衡算法时,它是把新的连接请求分配到当前连接数最小的服务器。最小连接算法是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。系统会记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器时,其连接数加1,当连接中止,其连接数减一。
如果考虑后台服务器的处理能力不同,也可以给每个服务器分配不同的权值,通过设置权重比率来调整最小连接算法的调度机率。
无权重参与
|
service1权重=4 |
||
|
servcie2权重=2 |
||
|
NW=当前连接数*(10000/权重) |
||
|
service1NW=连接数*2500 |
||
|
service2NW=连接数*5000 |
||
加入权重后请求的分配情况
|
请求数 |
service1 NW |
service2 NW |
当前NW |
|
0 |
0 |
0 |
0 |
|
1 |
2500 |
0 |
2500 |
|
2 |
2500 |
5000 |
5000 |
|
3 |
5000 |
5000 |
10000 |
|
4 |
5000 |
10000 |
12500 |
|
5 |
7500 |
10000 |
17500 |
|
6 |
10000 |
10000 |
20000 |
|
7 |
10000 |
15000 |
22500 |
|
8 |
12500 |
15000 |
27500 |
|
9 |
15000 |
15000 |
30000 |
|
10 |
15000 |
20000 |
32500 |
|
11 |
17500 |
20000 |
37500 |
|
12 |
20000 |
20000 |
40000 |
|
13 |
20000 |
25000 |
42500 |
|
14 |
22500 |
25000 |
45000 |
|
15 |
25000 |
25000 |
47500 |
|
16 |
25000 |
30000 |
50000 |
|
17 |
27500 |
30000 |
55000 |
|
18 |
30000 |
30000 |
57500 |
|
19 |
30000 |
35000 |
60000 |
注释:
当service的NW相同的时候遵循轮询算法,这也是导致在第一个周期与权重比例有所不同的原因所在。
当前NW的计算方法:NW=当前连接数*(10000/权重)但在计算系统当前NW(不是service的NW)时会利用上次索取Service的权重来进行计算。例如请求3-》4,由于请求3落在service1,servcie1的权重是4(10000/4=2500)那么在计算第4个请求的NW就用上次NW+10000/权重=12500。在4-》5的时候由于上次落在了service2上,那计算第5个请求的NW就用上次NW+10000/权重(用servcie2的权重)=17500。
为了明确看出权重的影响,下表以1:5的权重来体现
|
service1权重=5 |
||
|
servcie2权重=1 |
||
|
NW=当前连接数*(10000/权重) |
||
|
service1NW=连接数*2000 |
||
|
service2NW=连接数*10000 |
||
|
请求数 |
service1 NW |
service2 NW |
当前NW |
|
0 |
0 |
0 |
0 |
|
1 |
2000 |
0 |
2000 |
|
2 |
2000 |
10000 |
4000 |
|
3 |
4000 |
10000 |
14000 |
|
4 |
6000 |
10000 |
16000 |
|
5 |
8000 |
10000 |
18000 |
|
6 |
10000 |
10000 |
20000 |
|
7 |
10000 |
20000 |
22000 |
|
8 |
12000 |
20000 |
32000 |
|
9 |
14000 |
20000 |
34000 |
|
10 |
16000 |
20000 |
36000 |
|
11 |
18000 |
20000 |
38000 |
|
12 |
20000 |
20000 |
40000 |
|
13 |
20000 |
30000 |
42000 |
|
14 |
22000 |
30000 |
52000 |
|
15 |
24000 |
30000 |
54000 |
|
16 |
26000 |
30000 |
56000 |
|
17 |
28000 |
30000 |
58000 |
|
18 |
30000 |
30000 |
60000 |
|
19 |
32000 |
30000 |
62000 |
Citrix Netscaler负载均衡算法的更多相关文章
- 几种简单的负载均衡算法及其Java代码实现
什么是负载均衡 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种负载分担技 ...
- 负载均衡算法(四)IP Hash负载均衡算法
/// <summary> /// IP Hash负载均衡算法 /// </summary> public static class IpHash { static Dicti ...
- Round-Robin负载均衡算法及其实现原理
毫无疑问,随着互联网.移动网络接入成本的降低,互联网正在日益深入地走入我们的生活,越来越成为人们获取信息的高效平台,ICP行业也顺势呈现出强劲的成长趋势,成为互联网迅猛发展形势下最大的受益者,也直接促 ...
- Nginx几种负载均衡算法及配置实例
本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...
- f5负载均衡算法
负载均衡使用一种算法或公式来确定由哪一个后台服务器接收流量 负载均衡是基于连接的 1.静态负载均衡算法:以固定方式分发连接 轮询算法(Round Robin):将请求依次顺序循环地分发给服务器,从1到 ...
- [转]F5负载均衡算法及基本原理
原文:Intro to Load Balancing for Developers – The Algorithms 转载:http://blog.gesha.net/archives/205/ p ...
- RabbitMQ客户端负载均衡算法
负载均衡(Load balance)是一种计算机网络技术,用于在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最佳资源使用.最大化吞吐率.最小响应时间以及避免过载的 ...
- haproxy支持的负载均衡算法详解
目前haproxy支持的负载均衡算法有如下8种: 1.roundrobin 表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法.该算法是动态的,对于实 ...
- Ribbon,主要提供客户侧的软件负载均衡算法。
Ribbon Ribbon,主要提供客户侧的软件负载均衡算法.Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等.Ribbon内置可插拔.可定制的负载均衡组件.下面是用到的 ...
随机推荐
- jquery之prop与attr区别。
一切看下面代码示例<!DOCTYPE html> <html> <head> <title>全选和反选</title> <script ...
- emlog博客插件分享openSug
emlog博客插件百度搜索下拉提示框openSug.js发布上线啦: 下载:https://www.opensug.org/faq/.../opensug.emlog_v1.0.0.zip[~4KB]
- python3爬虫之开篇
写在前面的话: 折腾爬虫也有一段时间了,从一开始的懵懵懂懂,到现在的有一定基础,对于这一路的跌跌撞撞,个人觉得应该留下一些文字性的东西,毕竟好记性不如烂笔头,而且毕竟这是吃饭的家伙,必须用心对待才可以 ...
- idea添加源代码目录,编译代码出现时钟样式
项目结构需要有一个target目录,需要一个src目录,
- ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
Numeric Functions ABS(arg) CEIL(arg) DIV(arg1, arg2) DIVISION(arg1, arg2, dec) FLOOR(arg) MOD(arg1, ...
- 汇编实验14:访问CMOS RAM
汇编实验14:访问CMOS RAM 任务 编程,以“年/月/日 时:分:秒”的格式,显示当前的日期,时间. 预备知识 CMOS存储当前时间的信息:年.月.日.时.分.秒.这六个信息的长度均为1个字节, ...
- 【Consul】关于健康检查的一点思考
健康检查是Consul提供的一项主要功能,其配置格式如下: { "check": { "id": "redis", "name&q ...
- 网站的robots.txt文件
什么是robots.txt? robots.txt是一个纯文本文件,是爬虫抓取网站的时候要查看的第一个文件,一般位于网站的根目录下.robots.txt文件定义了爬虫在爬取该网站时存在的限制,哪些部分 ...
- 「日常训练」Alena And The Heater (CFR466D2D)
题意(Codeforces 940D) 根据给定要求构建数列,求能构建出相同数列的l和r. 分析 这题写的是真的烦.一定要想到对b串要按照5个5个的看!为什么5个5个的看?因为根据题意,是先看前4个再 ...
- Linux 文件属性及修改权限
输入 ll 或 ls -l 命令显示当前目录中文件的属性及文件所属的用户和组 root@user:/home/www# ll test total 880 drwxr-xr-x 2 root root ...