继续Nginx WRR负载均衡算法的优化

温州皮鞋厂老板告诉我一个新的WRR算法,基于数组哈希,但还是有点过度设计了,我说对于3,2,1这样权重的3个元素,搞3个元素1,2个元素2,1个元素3,一共6个元素揉成一把,随机扔到6个格子里完事,只要足够随机,这个算法应该就是最好的!不是想当然最好,是必然最好的,因为它就是最大熵结论,宇宙是懒惰的,低熵体的维持需要努力!

  好吧,后来我承认了,我就是用的这个算法来做的reuseport优化,只是增加了一点一致性哈希的味道!


现在来看第二个问题。

  负载均衡器并不是指单独的一台机器,否则他就是单点!它本身也可能是被负载均衡的或者是自负载的。我们假设3台负载均衡 X X Y Y Z Z 分别负载集合 G={A:a,B:b,C:c} G = { A : a , B : b , C : c } ,按照我在上一篇文章里 O(n) O ( n ) O(1) O ( 1 ) 的预处理方法,假设集合 G G 在WRR算法的作用下生成了序列 S=(aabcabcabaabcabc) S = ( a a b c a b c a b a a b c a b c )

  那么3个负载均衡器将共享这个序列 S S ,流向对 a a 的压力将会从序列 S S 的2个上升到 2×3 2 × 3 个,随着负载均衡器的数量增加到 n n 个,这个数字将会变成 2×n 2 × n 。一个随机的结果再怎么也经不起叠加。怎么办?

  好办!再随机呗!

  再按照负载均衡器的数量 n n 生成一个随机序列 S2=(m1,m2,....mn) S 2 = ( m 1 , m 2 , . . . . m n ) ,其中 mi m i 只是序列 S S 中的起始元素索引。这样,不同的负载均衡器收到的请求将会进行不同的轮询顺序,虽然只是一次凯撒密码变换,但总比直接用好!

你可能感兴趣的:(继续Nginx WRR负载均衡算法的优化)