负载均衡算法 : 加权轮询
1 加权轮询算法背景 轮询算法没有考虑每台服务器的处理能力,实际情况是每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,加权轮询算法的原理就是:根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能接受相应权值数的服务请求。 首先看一个简单的Nginx负载均衡配置。 http { upstream cluster { server a weight=1; server b weight=2; server c weight=4; } ... } 按照上述配置,Nginx每收到7个客户端的请求,会把其中的1个转发给后端a,把其中的2个转发给后端b,把其中的4个转发给后端c。 2 加权轮询算法描述 假设有 N 台实例 S = {S1, S2, …, Sn},配置权重 W = {W1, W2, …, Wn},有效权重 CW = {CW1, CW2, …, CWn}。每个实例 i 除了存在一个配置权重 Wi 外,还存在一个当前有效权重 CWi,且 CWi 初始化为 Wi;指示变量 currentPos 表示当前选择的实例 ID,初始化为 -1;所有实例的配置权重和为 weightSum; 那么,调度算法可以描述为: 初始每个实例 i 的 当前有效权重 CWi 为 配置权重 Wi,并求得配置权重和 weightSum; 选出 当前有效权重 最大 的实例,将