算法——平滑加权轮询
平滑加权轮询算法
上面的加权轮询算法会导致连续的调用同一台服务器,此时请求分发显得很不均衡,总是需要按权重值连续调用完同一台服务器之后才会调用接下来的服务器。
这时候就需要平滑加权算法。
假设服务器A配置权重为7,服务器B的配置权重为2,服务器配置权重为1。
总的权重值为10。平滑加权轮询的调度如下。每个服务器的有效权重为当前权重,与配置权重不同,有效权重是根据上一轮再计算出来的结果。每一轮选取权重最大的服务器进行请求。被选取的节点,当前有效权重减去总的权重值。下一轮开始前所有服务器的有效权重加上自己的配置权重。
- 服务器A权重:7
- 服务器B权重:2
- 服务器C权重:1
- 总权重:10
- 每轮各个服务器都会加上各自的配置权重
轮次服务器A服务器B服务器C当前选中服务器(当前权重最大者)
第一轮721A(当前权重-总权重=-3)
第二轮442A(当前权重-总权重=-6)
第三轮163B(当前权重-总权重=-4)
第四轮8-24A(当前权重-总权重=-2)
第五轮505A(当前权重-总权重=-5)
第六轮226C(当前权重-总权重=-4)
第七轮94-3A(当前权重-总权重=-1)
第八轮66-2A(当前权重-总权重=-4)
第九轮38-1B(当前权重-总权重=-2)
第十轮1000A(当前权重-总权重=0)
这样就不会出现连续重复的调用同一个服务器了。