brpc icon indicating copy to clipboard operation
brpc copied to clipboard

wrr在上游节点很多同时频繁调权的情况下会出现QPS的抖动

Open ZhihaoPan opened this issue 3 years ago • 6 comments

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(权重)的概率要大

ZhihaoPan avatar Jul 04 '22 03:07 ZhihaoPan

用的什么ns呢?是由于某个阶段的某个节点的权重比较大导致的吧

cdjingit avatar Jul 04 '22 06:07 cdjingit

感觉和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 avatar Jul 05 '22 09:07 ZhihaoPan

@ZhihaoPan weight如果频繁变的话,这块使用WeightedRandomizedLoadBalancer符合业务场景需要吗

lorinlee avatar Jul 09 '22 02:07 lorinlee

@lorinlee 因为机型不同会经常有节点迁移到不同机型上,而且会收到其他部署在该节点上的服务影响,所以我们会动态调整权重。一般10-20s微调一次

ZhihaoPan avatar Jul 11 '22 06:07 ZhihaoPan

@ZhihaoPan 所以可以使用WeightedRandomizedLoadBalancer吗

lorinlee avatar Jul 11 '22 09:07 lorinlee

@lorinlee 看了下代码应该是可以满足要求的,只是random的担心某些qps小的下游会不稳定 问题应该不大。 只是为啥不在wrr里面也保证下第一次的概率呢。

ZhihaoPan avatar Jul 13 '22 13:07 ZhihaoPan