Citrix Netscaler负载均衡算法
众所周知,作为新一代应用交付产品的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 |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)
博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一、redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现master-slave(主从)同步。 Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便。 如果简单地比较Redis与Memcached的区别,基本上有...
- 下一篇
java线程总结--synchronized关键字,原理以及相关的锁
在多线程编程中,synchronized关键字非常常见,当我们需要进行“同步”操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定。被synchronized锁定的代码块,只能同时有一条线程访问该代码块。 上面是很多人的认识,当然也是我之前对synchronized关键字的浅显认识,其实上面的观点存在一定的偏差。在参考了很多文章以及自己动手测试过相关代码后,我觉得有必要记录下自己对synchronized关键字的一些理解,在这个过程,会简单说说synchronized关键字的具体实现原理。 一、synchronized:synchronized是锁代码块还是锁对象? synchronized具有同步的功能,更准确说是具有互斥的锁功能,那么,它到底是锁定了相关的代码块还是说锁定了对象数据?答案是锁对象。下面就从synchronized修饰方法和修饰具体代码块两方面理解这个结论:synchronized是锁对象的。 1、synchronized修饰方法 废话不多说,先简单看测试代码: 代码一 publicclassSynchronizedTest1{publicstaticvoid...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能