灰度分桶演示
灰度发布只有一条铁纪律:同一用户稳定同一版。每个用户 id 各自哈希出一个 0–99 的桶位,桶位在比例线以下落新版 v2、以上留旧版 v1——拖动比例滑杆,看放量怎么「只新增、不洗牌」;再注入一个 v2 故障,看错误率越过 25% 回滚线的瞬间指针归零、全员各回旧版,桶位纹丝不动。
哈希口径与知识库《生产化》动手节 rollout.py 逐字对齐:md5(user_id) % 100 定桶位、bucket < percent 落 v2、错误率 ≥ 25% 自动回滚(flag.rollback_at);桶位为真实 MD5 计算,零 API、零随机。
10 位预设用户(横排顺序 = 请求到达顺序)
拖动 = 重新放量(账本清零)。0 = 指针归零(回滚态);向上拖注意看「新纳入」只出现在比例线新扫过的桶位上。
拖动滑杆放量:桶位在比例线以下的用户落新版。盯着老用户看——比例上调只「新增」,从没有人换边;下调也只把人确定性移回 v1。桶号是 id 的属性,比例线怎么挪都不变。
如果放量时重新随机洗牌,已经在 v2 的用户可能被随机分回 v1、v1 用户被随机推进 v2——同一个人上午一个答案下午另一个答案, 比全量出错更伤信任。哈希分桶的桶位是 id 的属性:比例线怎么挪、 回不回滚,桶号都不变;回滚后每个人回到自己熟悉的旧版,而不是再洗一次牌。
哈希口径与文章 rollout.py 逐字一致:md5(user_id) % 100 定桶位 (本页为真实 MD5,RFC 1321 常量硬编码,取模用逐位扫描避免大整数依赖)、bucket < percent 落 v2、 错误率 ≥ 25% 自动回滚(文章 flag.rollback_at);故障从第 5 个请求起咬 v2 (文章 serve() 口径)。10 个预设 id 为演示选样(桶位铺开便于观察),同 id 重复调用桶位恒等,零 API、零随机。