Golang 加权轮询负载均衡

Golang 加权轮询负载均衡

Posted by 锐玩道 on June 17, 2021

如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。[更多系列文章在我博客] https://coderdao.github.io/

Golang 实现加权轮询负载均衡

实现加权轮询负载均衡思路

代码实现一个加权负载均衡

  • Weight 初始化时对节点约定的权重
  • currentWeight 节点临时权重,每轮都会变化
  • effectiveWeight 节点有效权重,默认与Weight相同
  • totalWeight 所有节点有效权重之和:sum(effectiveWeight)

代码实现一个加权负载均衡

  1. currentWeight = currentWeight+effecitveWeight
  2. 选中最大的 currentWeight 节点为选中节点
  3. currentWeight = currentWeight-totalWeight (4+3+2=9)

所以我们能够 在表格模拟运行情况:

请求次数 请求前currentWelght 选中的节点 请求后currentWelght
1 [serverA=4,serverB=3,serverC=2] serverA [serverA=-1,serverB=6,serverC=4]
2 [serverA=-1,serverB=6,serverC=4] serverB [serverA=3,serverB=0,serverC=6]
3 [serverA=3,serverB=0,serverC=6] serverc [serverA=7,serverB=3,serverC=-1]
4 [serverA=7,serverB=3,serverC=-1] serverA [serverA=2,serverB=6,serverC=1]
5 [serverA=2,serverB=6,serverC=1] serverB [serverA=6,serverB=0,serverC=3]
6 [serverA=6,serverB=0,serverC=3] serverA [serverA=1,serverB=3,serverC=5]
7 [serverA=1,serverB=3,serverC=5] serverc [serverA=5,serverB=6,serverC=-2]

加权轮询负载均衡代码

图片描述

测试代码

图片描述

测试结果

图片描述