最近更新时间:2022-05-10 11:36:36
原理:轮询调度算法就是以轮询的方式依次将请求调度到不同的服务器,即每次调度执行i = (i + 1) mod n,选出第 i 台服务器。加权轮询调度算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,按权值的高低和轮询方式分配请求到各服务器。权值高的服务器先收到连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
优势:算法简洁。它无需记录当前所有连接的状态,所以它是一种无状态调度。
劣势:不适用于请求服务时间变化比较大,或者每个请求所消耗的时间不一致的情况,此时轮询调度算法容易导致服务器间的负载不平衡。
适用场景:每个请求所占用的后端服务器时间基本相同,常用于短连接服务,例如 HTTP 等服务。
用户推荐:用户可知每个请求所占用后端时间基本相同或相差较小时,如已知后端服务器处理的都是同类型或者相似类型的请求时,推荐选择加权轮询的方式,因为该实现方式消耗小,无需遍历,效率较高。
1) 假设各台 RS 的权值依次为 wi,当前连接数依次为 ci,依次计算 ci/wi,值最小的 RS 作为下一个分配的 RS
2) 如果存在ci/wi相同的 RS,这些 RS 再使用加权轮询的方式调度
优势:此种均衡算法适合处理长时的请求服务。
劣势:相较于加权轮询算法,加权最小连接数算法需要保存服务器现有的连接数目,它是一种有状态调度。
适用场景:每个请求所占用的后端时间相差较大的场景,常用于长连接服务。
用户推荐:如果用户需要处理不同的请求,且请求所占用后端时间相差较大,如 2 ms 和 2s 这种数量级的差距时,推荐使用加权最小连接数算法实现负载均衡。
为了让用户在不同场景下,能够让 RS 集群稳定的承接业务,我们给出几个负载均衡选择与权重配置的实例供用户进行参考。
场景1:
若用户首次接触云服务,且建站时间不长,网站负载较低,则建议购买相同配置的 RS,因此 RS 都是无差别的接入层服务器。在此场景下,用户可以将 RS 的权重设置为相同的值,采用加权轮询的方式进行流量分发。
场景2:
设有2台配置相同(CPU 和 内存)的 RS,由于性能一致,用户可以将 RS 权重都设置为10。设现在每台 RS 与客户端端建立了50个 TCP 连接,此时新增一台 RS。在此场景下,推荐用户使用最小连接数的均衡方式,这样能快速的提升新加入 RS 的负载,降低另外2台 RS 的压力。
场景3:
用户有4台服务器,用于承载简单的静态网站访问,且4台服务器的计算能力的比例为 6:3:2:1(按CPU、内存换算)。在此场景下,用户可以依次将 RS 权重比例设置为60,30,20,10,由于静态网站访问大多数是短连接请求,因此可以采用加权轮询的均衡方式,让 SLB 按 RS 的性能比例分配请求。
场景4:
某用户有12台 RS 用于承担海量的 WEB 访问请求,且不希望多购置 RS 增加支出。 某台 RS 经常会因为负载过高,导致服务器重启。在此场景下,建议用户根据 RS 的性能设置相应的权重,给负载过高的 RS 设置较小的权值。除此之外,可以采用最小连接数的负载均衡方式,将请求分配到活跃连接数较少的 RS 上,从而解决某台 RS 负载过高的问题。
场景5:
某用户有3台 RS 用于处理若干长连接请求,且这3太服务器的计算能力比例为4:2:1(按CPU、内存换算)。 此时性能最好的服务器处理请求较多,用户不希望过载此服务器,希望能够将新的请求分配到空闲服务器上。在此场景下,可以采用加权最小连接数的均衡方式,并适当降低繁忙服务器的权重,便于 SLB 将请求分配到活跃数较少的 RS 上,实现负载均衡。
纯净模式