中转平台灰度发布,新模型小流量试运行方案
中转平台灰度发布新模型,最怕的是一上线就全量放量,结果出现报错、超时或者生成质量不稳定,影响线上用户。
小流量试运行的思路很简单:让新模型先承担一小部分请求,跑一段时间看监控和反馈,确认没问题再逐步扩大流量,出问题也能立刻切回旧模型。
本文以常见的中转平台(如 One API、New API 或自建 Nginx 网关)为例,讲清楚灰度发布的准备、步骤、避坑和验证方法。
发布前先想清楚这三件事
动手配置之前,先把灰度发布的基础条件准备好,避免中途手忙脚乱。
- 新旧模型并存。中转平台里要同时配置旧模型和新模型的渠道,并确认两个渠道都通过了测试请求。建议给新模型渠道打上明确备注,例如
gpt-4o-20240515-灰度,防止后面认错渠道。 - 确认灰度比例和用户范围。小流量不建议只看百分比,最好先限制指定的测试用户或 API Key。比如先让内部账号和少量合作方账号走新模型,观察 1-2 天再放开到 5%、10%、20%。
- 准备监控面板。至少要看请求成功率、平均延迟、Token 消耗速率、上游返回错误码。如果走 Nginx 网关,还要盯住
upstream_response_time和 5xx 状态码。
如果中转平台本身有模型加权或渠道权重功能,可以直接在后台配置;
如果没有,再考虑用 Nginx 按百分比分流,下面是两种做法。
方式一:在中转平台后台按权重分流
以支持渠道权重的中转平台为例,灰度发布不需要写代码,后台点几下就能完成。
操作路径一般是进入后台的“模型渠道”或“令牌管理”页面,找到新模型对应的渠道,填写如下配置:
渠道名称:gpt-4o-灰度
模型名称:gpt-4o
权重:10
状态:启用
重定向:关闭
这里的权重表示该渠道在总流量中分配到的比例。
权重 10,旧模型权重 90,新模型大概承担 10% 的请求。
保存后,先用灰度 Key 发几条测试请求,确认响应正常,就可以让少量真实请求进入。
另外一个更稳妥的方法是单独创建一个“灰度分组”,给测试用户分配一个带分组标识的 Key,在渠道配置里把该分组固定指向新模型。
这样灰度影响范围更可控,不会因为百分比随机分配让无关用户突然切换模型。
方式二:自建 Nginx 网关按百分比切流
如果你的中转服务前面还有一层 Nginx,或者你想在不改动业务代码的情况下做灰度,可以用 Nginx 的 split_clients 模块按用户维度分流。
打开 Nginx 配置文件,建议新建一个独立的 gray.conf,先定义分流变量:
split_clients "${remote_addr}" $model_backend {
10% new_upstream;
* old_upstream;
}
split_clients 会基于用户 IP 哈希出一个稳定值,确保同一个用户多次请求尽量命中同一个后端。
然后把原来的 API 反向代理改成下面这样:
location /v1/chat/completions {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$model_backend;
}
这里的 new_upstream 和 old_upstream 需要提前在 http 块里定义好:
upstream new_upstream {
server 127.0.0.1:8081; # 中转平台新模型渠道入口
}
upstream old_upstream {
server 127.0.0.1:8080; # 中转平台旧模型渠道入口
}
改完后执行 nginx -t 检查语法,再执行 nginx -s reload 让配置生效。
这样新模型就拿到了 10% 的流量,而且是根据用户 IP 稳定分配,不是每个请求随机跳变。
试运行期间怎么盯、怎么回滚
新模型小流量跑起来后,立刻观察前面提到的监控指标。
建议每小时记录一次,重点看三个数据:
- 请求错误率:如果新模型渠道出现连续 5xx 或超时,说明上游或者中转链路有问题,及时降权或关闭渠道。
- 响应延迟:用 Nginx 日志里的
$upstream_response_time对比新旧渠道平均耗时,新模型如果明显偏慢,需要评估是否可接受。 - 内容质量反馈:对生成类模型,最好让灰度用户提交反馈标签,比如“文不对题”“重复内容”“格式错误”等。
回滚操作同样要提前想好。
中转平台渠道权重方案回滚很简单,直接把新模型渠道权重改为 0 或停用;
Nginx 分流方案回滚则把 gray.conf 中 split_clients 的比例改成 0%,或者干脆注释掉整个文件再 reload。
回滚后要观察旧模型流量是否恢复到正常水位,确认没有请求继续打到新模型。
容易踩的坑和正确做法
坑一:只看百分比,不管用户维度。 按百分比随机分流会让同一用户反复切换模型,体验非常不稳定。
建议优先按用户 ID、渠道分组或 Key 维度灰度,稳定后再逐步放大流量。
坑二:新模型渠道没有单独做超时限制。 如果上游新模型响应慢,会拖住整个中转服务的 Nginx worker。
建议在 Nginx 层给新模型单独配置 proxy_read_timeout 60s,并打开 rate limit,防止死循环请求打满连接。
坑三:回滚后忘了清理临时配置。 灰度结束确定新模型稳定后,删除旧的 Nginx 灰度配置或后台冗余渠道,避免下次误用。
坑四:没有在低峰期启动灰度。 小流量试运行建议选在工作日晚间或周末低峰期启动,即使出问题,影响面也最小,排查时也不会因为线上高峰而手忙脚乱。
灰度验证清单
最后给一份可以直接照着勾选的验证清单:
- 新旧模型渠道都能独立通过测试请求,返回结果符合预期。
- 灰度流量比例设置正确,比如配置 10%,实际后台统计接近 10%。
- 使用相同测试内容分别请求新旧模型,确认路由到了对应渠道。
- Nginx 日志中能看到后端 IP 分别落在新旧 upstream,且比例正常。
- 监控面板里新模型渠道的错误率低于阈值,延迟在可接受范围。
- 模拟故障时,将新模型渠道权重改为 0 或停用,流量能立即切回旧模型。
- 连续观察 24-48 小时后,确认新模型没有明显问题,再逐步将权重提升到 20%、50%、100%。
如果你正在处理新模型小流量试运行,建议先按这套流程把灰度比例控制在 10% 以内,跑满一个业务周期再扩大范围。
遇到异常时,优先回到渠道配置和 Nginx 分流日志里排查,同时把回滚按钮牢牢握在手里,灰度发布的核心不是“放量多快”,而是“风险多小”。