wrr在上游节点很多同时频繁调权的情况下会出现QPS的抖动
Describe the bug (描述bug) wrr在上游节点很多同时频繁调权的情况下会出现QPS的抖动
To Reproduce (复现方法) 上游设置如50个节点按照wrr访问下游3个节点,期间每10s调权一次。
Expected behavior (期望行为) 权重最大的节点QPS会向上波动。
Versions (各种版本) OS: Compiler: brpc: protobuf:
Additional context/screenshots (更多上下文/截图) 我理解是wrr初始化的时候不是按照权重概率计算节点的,如果下游节点只有3-4个,那么命中权重最大的节点的概率比 权重/sum(权重)的概率要大
用的什么ns呢?是由于某个阶段的某个节点的权重比较大导致的吧
感觉和ns关系不大,我看每次如果有remain_server.id != server_list[pos].id 就会把remain_server.weight置0,那这时候就相当于从某个position的0位置开始按stride走,这时候的概率就不是权重的概率了吧。
我们服务权重变更很频繁,下游假设只有3个节点 权重为(110, 93, 87) stride为107,某一时刻权重微调,server_list顺序变了,那么按照现在逻辑remain_server.weight置0,都从pos的起始点走,那走到110上的概率接近2/3了吧。 我们上游节点有一百个,这种抖动现象就很明显
@ZhihaoPan weight如果频繁变的话,这块使用WeightedRandomizedLoadBalancer符合业务场景需要吗
@lorinlee 因为机型不同会经常有节点迁移到不同机型上,而且会收到其他部署在该节点上的服务影响,所以我们会动态调整权重。一般10-20s微调一次
@ZhihaoPan 所以可以使用WeightedRandomizedLoadBalancer吗
@lorinlee 看了下代码应该是可以满足要求的,只是random的担心某些qps小的下游会不稳定 问题应该不大。 只是为啥不在wrr里面也保证下第一次的概率呢。