把生产别名 prod 从 gpt-4o-2024-08-06 指向 gpt-4.1 做灰度,发现格式不兼容后立刻改回,20 分钟后仍有 30% 请求返回新版本特有的字段。
一开始怀疑是「回滚只改了别名,客户端代码里写死了新模型名」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。网关侧缓存了别名到模型的映射。也可能是部分实例长连接未断开,仍持有旧配置。
不容易想到的是,多区域部署,只回滚了一个区域的配置。
上来先确认别名当前实际指向
curl -s https://api.example.com/admin/aliases/prod -H "Authorization: Bearer $ADMIN" | jq '.target'
再往下列出仍在报新版本字段的实例
kubectl get pods -l app=gateway -o wide
滚动重启网关让映射失效
kubectl rollout restart deployment/gateway -n prod
等前面都确认过,再逐个区域核对别名配置
for r in cn-north cn-south; do curl -s https://$r.api.example.com/admin/aliases/prod | jq -r '.target'; done
别只看报错消失,验证要多做一步。所有区域别名都指回旧模型,重启后新版本字段消失,连续观察 30 分钟新版本流量为 0,客户端解析恢复正常。
这里还有个坑。回滚不只要改别名,还要处理长连接与多区域副本,回滚后必须验证流量而不是验证配置,两者经常不一致。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
