本篇主要记载常见的几种负载均衡算法:
假如现在有服务器列表:A、B、C
随机
简单随机算法:随机很简单,就是产生随机数,每次调用根据随机数对应的机器
加权随机算法:
1.根据权重比值,修改对应机器的占比,基于简单随机算法实现。(权重太多,对应的列表size过大)
2.根据坐标轴方式:
将机器对应的权重映射到坐标轴上,随机算法产生随机数,然后随机数与坐标轴坐标对比,看落在哪个区间,这就对应哪个机器。
例:A->3,B->4,C->3 0---3----7---10, 产生8,8<targetValue return else 5=8-3; 5<targetValue
轮询(RoundRobin)
1.简单轮询算法:做一个全局计数器,每次调用递增1,取模。
2.加权轮询算法:也可以基于加权随机坐标轴的方法。可能会出现AAABBBBCCC,这样就不是很均匀。极端情况下权重配置也会导致某台服务器负载很大。引入动态权重的概念,动态权重=静态权重+上次的动态权重结果
过程:
curWeight += weight max(curWeight) result max(curWeight) -= totalWeight
5,1,1 5 A -2,1,1
3,2,2 3 A -4,2,2
1,3,3 3 B 1,-4,3
6,-3,4 6 A -1,-3,4
4,-2,5 5 C 4,-2,-2
9,-1,-1 9 A 2,-1,-1
7,0,0 7 A -1,0,0
4,1,1 4 A -3,1,1
哈希
最小活跃数
来源:oschina
链接:https://my.oschina.net/whling/blog/3162459