Load balance¶
提供同一个服务的多个novaserver对应连接池中的一个连接,在连接的选择上,zan框架采用加权轮询的负载均衡策略。
配置¶
服务负载均衡的配置之中,权重越大的server调度优先级越高。
算法流程¶
假设有一组服务器 S = {S0, S1, …, Sn-1}有相应的权重{W0, W1, …,Wn},currentWeight为选取出的server需要的最低权重值,maxWeight为所有服务器中的最大权重值,gcdWeight是所有权重的最大公约数。
- 每一轮循环回到S0后,currentWeight减小gcdWeight,如果currentWeight <0,重新赋值为maxWeight。
- 从S0开始循环遍历所有服务器,找到第一个权重大于currentWeight的服务器返回。
对应的伪代码为:
- while (true) {
- currentIndex = (currentIndex + 1) % serverCount;
- if (currentIndex == 0) {
- currentWeight = currentWeight - gcdWeight;
- if (currentWeight <= 0) {
- currentWeight = maxWeight;
- }
- }
- if (servers[currentIndex]['weight'] >= currentWeight)
- return servers[currentIndex];
- }