3. 策略选择
根据前面的这些分析,虽然我们有三种卸载策略和两种放置策略,可以产生3*2=6种组合,但其实我们只有两种比较推荐的选择:
ThresholdShedder + LeastResourceUsageWithWeight
UniformLoadShedder + LeastLongTermMessageRate
这两种选择各有优缺点,读者可根据场景需求自行选择,下面表格总结了两种选择的优缺点:
这两种选择均具有各自的优势与不足,读者可依据下面表格和具体的场景需求自主进行选择。
策略
适应异构环境
(适应性)
适应负载抖动
(稳定性)
过度加载问题
(正确性)
过度卸载问题
(正确性)
负载均衡速度
ThresholdShedder + LeastResourceUsageWithWeight
一般1
良
差
差
一般3
UniformLoadShedder + LeastLongTermMessageRate
差2
差
良
良
一般4
可以看到:
在适应异构环境方面,ThresholdShedder + LeastResourceUsageWithWeight 的表现只能评为一般。原因在于,ThresholdShedder 并非能完全适配异构环境。尽管它不会将高负载的 broker 错误判定为低负载,然而异构环境依然会对 ThresholdShedder 的负载均衡成效造成影响。
比如说,当前集群存在三台broker,资源使用率分别为10,50,70,broker1、broker2同构,broker3上面是空载,但是因为部署了其他进程,导致它资源使用率达到70。此时我们会希望broker3分摊部分压力给broker1,但是由于平均负载为43.33,43.33+10>50,因此不会判定broker2为超载,而超载的broker3也没有流量可以卸载,从而使得负载均衡算法处于无法工作的状态。
在同样的场景下,若采用 UniformLoadShedder 与 LeastLongTermMessageRate 的组合,问题将更为严峻。这会致使部分负载从 broker2 转移至 broker3,进而使得 broker3 所服务的topic 均出现显著的性能下滑,故而适应性评定为差。
因此,不建议将Pulsar运行在异构的环境下,当前的负载均衡算法都无法很好地适应。
在负载均衡速度层面,尽管 ThresholdShedder + LeastResourceUsageWithWeight 能够一次性卸下所有高负载 broker 的负荷,然而,鉴于历史权值算法会对负载均衡决策的准确性产生严重干扰,实际上它需要经过多次负载均衡操作才能最终趋于稳定,故而其负载均衡速度得分仅为一般水平。
UniformLoadShedder + LeastLongTermMessageRate 由于一次仅能处理一个超载的 broker,所以当 broker 数量较多时,完成负载均衡所需的时间较长,因此负载均衡速度得分也是一般。
上面这些结论我都通过实验进行了验证,感兴趣的读者可以查看AvgShedder的PR内容,我将实验的过程和结果都贴在PR里面。
[improve] [pip] PIP-364: Introduce a new load balance algorithm AvgShedder
Last updated
Was this helpful?

