← 关联知识节点:生产化:灰度、回滚、成本治理与 Runbook
交互工具 · 直觉

灰度分桶演示

灰度发布只有一条铁纪律:同一用户稳定同一版。每个用户 id 各自哈希出一个 0–99 的桶位,桶位在比例线以下落新版 v2、以上留旧版 v1——拖动比例滑杆,看放量怎么「只新增、不洗牌」;再注入一个 v2 故障,看错误率越过 25% 回滚线的瞬间指针归零、全员各回旧版,桶位纹丝不动。

哈希口径与知识库《生产化》动手节 rollout.py 逐字对齐:md5(user_id) % 100 定桶位、bucket < percent 落 v2、错误率 ≥ 25% 自动回滚(flag.rollback_at);桶位为真实 MD5 计算,零 API、零随机。

灰度发布只有一条铁纪律:同一用户稳定同一版。10 位用户的 id 各自 哈希出一个 0–99 的桶位, 桶位在比例线以下落新版 v2、以上留旧版 v1。 拖滑杆放量看只新增不洗牌,再注入一个 v2 故障,看错误率越线的瞬间自动回滚、全员各回旧版。
新版人数
3/10
指针 30% · 桶位 < 30 落新版
v2 错误率
—
注入故障后开始记账
回滚状态
正常放量
版本指针回拨,秒级

10 位预设用户(横排顺序 = 请求到达顺序)

新版 v2 旧版 v1 刚变化
琪
琪琪
qiqi
桶 90
v1 旧版
阿
阿伦
alan
桶 72
v1 旧版
柔
柔柔
rourou
桶 08
v2 新版
飞
飞飞
feifei
桶 54
v1 旧版
刚
刚刚
ganggang
桶 17
v2 新版
哈
哈娜
hana
桶 61
v1 旧版
甜
甜甜
tiantian
桶 27
v2 新版
可
可可
keke
桶 38
v1 旧版
乐
乐乐
lele
桶 47
v1 旧版
欧
欧欧
ouou
桶 79
v1 旧版
哈希桶位轴 0–99:每人钉在自己的桶位上——「同一用户稳定同一版」不是承诺,是空间位置。
比例线 30%柔柔柔 08刚刚刚 17甜甜甜 27可可可 38乐乐乐 47飞飞飞 54哈哈娜 61阿阿伦 72欧欧欧 79琪琪琪 90010203040506070809099
灰度比例指针30%

拖动 = 重新放量(账本清零)。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、零随机。