灰度發布模型版本:怎麼安全地換模型
換模型跟改程式不一樣,行為變化沒辦法用單元測試涵蓋。要靠流量分配。
模型換版的風險在於:所有測試都通過,但真實流量的表現變差。因為評測集永遠涵蓋不了真實輸入的全部樣態。
分階段放流量
- 影子模式:新版本收到複製的真實流量,但結果不回傳給使用者,只記錄比對。
- 1% 灰度:小比例真實流量,密切看指標。
- 10% → 50% → 100%:每一階段觀察足夠長的時間,涵蓋不同時段的流量特性。
def pick_model(user_id, rollout_pct):
# 用穩定雜湊,同一個使用者體驗一致,不會忽新忽舊
bucket = int(hashlib.md5(str(user_id).encode()).hexdigest(), 16) % 100
return 'v2' if bucket < rollout_pct else 'v1'要盯的指標
- 技術指標:延遲、錯誤率、格式合法率、成本。
- 業務指標:完成率、轉真人比例、重試比例、使用者評分。
- 分布指標:輸出長度、棄答比例的變化。
影子模式最被低估
影子模式能在零風險下收集真實輸入的比對資料。把兩個版本的輸出存起來,抽樣人工比較,你會發現評測集沒涵蓋到的問題。缺點是成本翻倍,所以通常只跑一小段時間或抽樣流量。
回滾路徑要事先驗證過。「改個設定就好」在半夜兩點往往沒那麼簡單——先在非尖峰時段實際演練一次回滾。