权重轮询的实现

1.原理

通过对各个实例的不同权重来分配请求,例如nginx的转发中用到。

2.模拟个例子

假设有四个实例A,B,C,D.他们平均响应时间为10,40,80,100.所以总响应时间为10 + 40 + 80 +100 = 230,每个实例的权重为总响应时间与自身的平均响应时间的差的累积所得,所以这四个实例的权重为:

  • 1.实例A: 230 - 10 = 220
  • 2.实例B: 220 + ( 230 - 40 ) = 410
  • 3.实例C: 410 + ( 230 - 80 ) = 560
  • 4.实例D: 560 + ( 230 - 100 ) = 690

看到这里应该大概了解到,上面四个像是区间的上限,所以可以这么设计,每个实例的区间下限是上一个实例的区间上限,能得到这四个实例的权重区间.

  • 1.实例A: [0 , 220]
  • 2.实例B: (220, 410]
  • 3.实例C: (410 , 560]
  • 4.实例D: (560 , 690)

注意上面的开闭区间。

不难发现,上面的区间的宽度的特点是响应时间越短,其区间宽度越大。

你可能感兴趣的:(权重轮询的实现)