帮助与文档

当前位置: 首页帮助中心云负载均衡 CLB >  均衡算法选择

均衡算法选择
发布时间:2017-05-09

负载均衡算法比较分析

1. 加权轮询算法 Weighted Round-Robin Scheduling

  • 原理:轮叫调度算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,选出第i台服务器。加权轮叫调度算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

  • 优势:算法的优点是其简洁性,和实用性。它无需记录当前所有连接的状态,所以它是一种无状态调度。

  • 劣势:加权轮叫调度算法相对简单,但不适用于请求服务时间变化比较大,或者每个请求所消耗的时间不一致的情况,此时轮叫调度算法容易导致服务器间的负载不平衡。

  • 适用场景:每个请求所占用的后端时间基本相同,负载情况最好。常用于短连接服务,例如 HTTP 等服务。

  • 用户推荐:用户可知每个请求所占用后端时间基本相同时,如已知rs处理的都是同类型或者相似类型的请求时,推荐选择加权轮询的方式。当请求时间相差较小时也推荐使用加权轮询的方式,因为该实现方式消耗小,无需遍历,效率较高。

2. 加权最小连接数 Weighted Least-Connection Scheduling

  • 原理:在实际情况中,客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间的延伸,如果采用简单的轮询或随机均衡算法,每一台服务器上的连接进程数目可能会产生极大的不同,这样实际上并没有达到真正的负载均衡。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。与轮询调度算法相反,最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1; 当连接中止或超时,其连接数减一。权重最少连接数调度算法是在做少连接数调度算法的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求,是在最少连接数调度算法的基础上的改进。
      1)  假设各台rs的权值依次为wi,当前连接数依次为ci,依次计算ci/wi,值最小的rs作为下一个分配的rs
      2)  如果存在ci/wi相同的rs,这些rs再使用加权轮训的方式调度

  • 优势:此种均衡算法适合长时处理的请求服务,如FTP等应用。

  • 劣势:由于接口限制,目前最小连接数和会话保持功能不能同时开启。

  • 适用场景:每个请求所占用的后端时间相差较大的场景。常用于长连接服务。

  • 用户推荐:如果用户需要处理不同的请求,且请求所占用后端时间相差较大,如3ms和3s这种数量级的差距时,推荐使用加权最小连接数算法实现负载均衡。

3. 源地址散列调度算法 ip_hash

  • 原理:根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

  • 优势:ip_hash可以实现部分会话保持的效果,能够记住源ip,使某一client请求通过hash表一直映射在同一台rs上。因此在不支持会话保持的场景可以使用ip_hash进行调度。

  • 用户推荐:将请求的源地址进行hash运算,并结合后端的服务器的权重派发请求至某匹配的服务器,这可以使得同一个客户端IP的请求始终被派发至某特定的服务器。该方式适合负载均衡无cookie功能的TCP协议。



以上内容是否对您有帮助?