新结算页灰度开了 30%,同一个账号连刷 5 次,3 次是新版 2 次是旧版。用户下单时看到的金额在一次会话里变了两次,客服收到 4 条相关工单。日志里能对上时间点,这种反而好排。

开关按实例随机数判断,请求落到哪台机器结果就不同,没有按用户 id 做稳定分桶。会话里也没有记住命中的版本。这一点先确认清楚,后面就不用反复试。

SELECT MOD(CRC32('u_88213'), 100) AS bucket;
-- 小于 30 命中新版 同一 id 每次结果一致
SELECT user_id, variant FROM gray_assign WHERE exp = 'checkout_v2' LIMIT 5;

这次卡住的地方就在「灰度开关维度错误」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:用用户 id 取哈希取模 同一个用户固定落在一边;命中结果写进会话或 cookie 后续请求沿用;灰度比例调整按桶扩 不要重新洗牌。

结果对不对很好判断,同一账号连刷 10 次全部命中同一个版本,另一个账号固定落在另一侧。

作者 9823189