温州皮鞋厂老板告诉我一个新的WRR算法,基于数组哈希,但还是有点过度设计了,我说对于3,2,1这样权重的3个元素,搞3个元素1,2个元素2,1个元素3,一共6个元素揉成一把,随机扔到6个格子里完事,只要足够随机,这个算法应该就是最好的!不是想当然最好,是必然最好的,因为它就是最大熵结论,宇宙是懒惰的,低熵体的维持需要努力!
好吧,后来我承认了,我就是用的这个算法来做的reuseport优化,只是增加了一点一致性哈希的味道!
现在来看第二个问题。
负载均衡器并不是指单独的一台机器,否则他就是单点!它本身也可能是被负载均衡的或者是自负载的。我们假设3台负载均衡 X X ,, Z Z 分别负载集合,按照我在上一篇文章里 O(n) O ( n ) 化 O(1) O ( 1 ) 的预处理方法,假设集合 G G 在WRR算法的作用下生成了序列。
那么3个负载均衡器将共享这个序列 S S ,流向对的压力将会从序列 S S 的2个上升到个,随着负载均衡器的数量增加到 n n 个,这个数字将会变成。一个随机的结果再怎么也经不起叠加。怎么办?
好办!再随机呗!
再按照负载均衡器的数量 n n 生成一个随机序列,其中 mi m i 只是序列 S S <script type="math/tex" id="MathJax-Element-2898">S</script>中的起始元素索引。这样,不同的负载均衡器收到的请求将会进行不同的轮询顺序,虽然只是一次凯撒密码变换,但总比直接用好!