>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19622 个阅读者 刷新本主题
 * 贴子主题:  Citrix Netscaler负载均衡算法 回复文章 点赞(0)  收藏  
作者:Jacky    发表时间:2020-03-15 20:50:59     消息  查看  搜索  好友  邮件  复制  引用

      众所周知,作为新一代应用交付产品的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


        

----------------------------
原文链接:https://blog.51cto.com/caojin/1926308

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-16 11:46:32 重新编辑]
  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->JavaWeb应用入门(Ⅱ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->ServerSocket用法详解
  精通Spring-->绑定表单
  Vue3开发-->绑定表单
  整理得吐血了,二叉树、红黑树、B、B+树超齐全,快速搞定数据...
  位运算指南
  算法学习与收集:一些有用的算法网站和网页
  深度学习之图片压缩算法
  HAProxy 之 算法介绍
  基于SQL的数据库算法研究
  算法之原码、补码、反码
  基于JavaScript的Base64编码、解码算法
  有趣的位图排序算法
  全排列的六种算法
  LinkedList,LinkedHashMap,LruCache源码解析
  Java数据结构与算法 - 栈和队列
  数据结构中的数组
  技术和算法的抉择
  浅谈常见的七种加密算法及实现
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。