按 5% 灰度新模型,配置里写 weight 5,实际日志里新版本占 87%,user_id 哈希分桶看着是均匀的,两边的比例完全对不上。
一开始怀疑是「缓存层把首次命中的结果复用给其他用户」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。权重配的是百分比还是千分位理解错。少数情况下是两条灰度规则叠加 同一请求被判定两次。
还有一种情况,分桶键取了 session 而不是 user_id。
第一件事是按分桶键统计真实分布
python bucket.py --key user_id --log req.jsonl
再往下核对配置单位并打印命中的规则
python gwctl.py rules --show-hits
缓存 key 加上用户与版本维度
python patch_cache.py --key 'tenant:user:ver'
灰度规则收敛到单一来源
python gwctl.py rules --dedupe
改之前先确认了最近有没有人动过配置,避免白查一遍。
改完先别撤,确认这几项。新版本占比稳定在 5% 左右,一小时内的波动不超过 1 个百分点。
权重单位先确认再放量,两条规则叠在一起时百分比会被放大成几十倍。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
