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