常见的负载均衡策略

562 阅读2分钟

1、最短响应时间负载均衡

  1. 从多个服务提供者中选择出调用成功的且响应时间最短的服务提供者,由于满足这样条件的服务提供者有可能有多个。所以当选择出多个服务提供者后要根据他们的权重做分析。
  2. 但是如果只选择出来了一个,直接用选出来这个。
  3. 如果真的有多个,看它们的权重是否一样,如果不一样,则走加权随机算法的逻辑。
  4. 如果它们的权重是一样的,则随机调用一个。
  • 成功响应时间 = 所有响应成功的总时间 / 响应成功的次数 image.png

2、最少连接算法

在这个模式下,一个请求会被 NGINX 转发到当前活跃请求数量最少的服务实例上

3、最小活跃数负载均衡

image.png

4、一致性哈希负载均衡

根据发送请求的 IP 地址的 hash 值来决定将这个请求转发给哪个后端服务实例

5、加权轮询负载均衡

  • 比如服务器 A、B、C 权重比为 5:3:2。那么在10次请求中,服务器 A 将收到其中的5次请求,服务器 B 会收到其中的3次请求,服务器 C 则收到其中的2次请求。
  • 存在bug,现在一般都使用加权平滑

image.png

6、平滑加权轮询负载均衡

  • 简单说明下计算过程,直接贴代码很多人看不懂

  • 假设 A B C 权重 分别为 5,1,1,

  • 两个weight

    • 静态weight :5 :1:1
    • 动态weight :每一次调用都会变化 ,最开始 是 0,0,0
  • 第一次调用

  • currentWeight = currentWeight + Weight = 5 : 1: 1

  • 选出最大值的 current,是5 ,对应的是 A 服务器进行调用, return A

  • 调用之后,最大值的current = 5 需要减去 sum(weight) = 7 所以新的currentWeight = -2:1:1

  • 第二次调用

  • 重新到第一步调用 currentWeight + Weight(5:1:1) = 3:2:2

  • 选出最大的 current = 3 对应的是 A 服务器 return A

  • 调用之后,最大值 current = 3 需要减去 sum(weight)=7 所以新的 currentWeight = -4:2:2

  • 第三次调用

  • 重新到第一步调用 currentWeight(-4:2:2) + Weight(5:1:1) = 1:3:3

  • 选出最大的 current = 3 --- 对应的是 B 服务器 return B

  • 调用之后,最大值 current = 3 需要减去 sum(weight)=7 所以新的 currentWeight = 1:-4:3

  • 第四次调用

  • 重新到第一步调用 currentWeight(1:-4:3) + Weight(5:1:1) = 6:-3:4

  • 选出最大的 current = 6 --- 对应的是 A 服务器 return A

  • 调用之后,最大值 current = 6 需要减去 sum(weight)=7 所以新的 currentWeight = -1:-3:4

参考