日期:2026-09-11
某团队在我们 AI 底座上管十几个推理服务,早期改个批处理窗口、温度参数都要登机器改配置文件再重启。一重启,在线请求全断,用户那边就是一次抖动。灰度也只能跟着发版走,想小范围试个新参数,得走完整发版流程,频率一高,运维和用户都烦。我们印象最深的一次,深夜调参重启,把一个大客户的实时问答抖了十几秒,对方直接在群里问是不是挂了,运维被叫起来救火到凌晨。那次之后我们下定决心,配置和代码必须分开治理,靠重启发版做参数调整太原始,既伤用户也累自己,关键还慢,等发版跑完最佳调参窗口早过了。
这个项目把推理参数收进配置中心,所有服务从中心拉配置,改一处全链路生效。热加载让参数变更不用重启进程,网关先对新流量用新参数、旧流量跑完再用,做到无感切换。灰度按服务实例分批,先放 10% 实例验证,指标没问题再全量。每次变更都留痕,谁改的、改了啥、回滚到哪一版,一目了然。我们还给配置中心接了变更看板,能看每次参数改动对应的延迟和吞吐曲线,调参人自己就能判断这次改动是赚还是亏,不用等监控同学来报。
难点在热加载的安全性。参数不是都能热更,有的改了要重建批处理状态,硬热更会乱。我们把参数分成可热更和需重启两类,可热更的走热加载通道,需重启的明确提示走发版,不让运维凭经验猜。第二是灰度失败要能快回,配置中心保留最近 N 版,回滚就是切回上一版配置,秒级生效,不用重新部署,这比重新发版救火快了不止一个量级。第三是变更可溯,每次写配置都带操作人、时间戳、diff,审计出问题能定位到具体那次改动,不用翻聊天记录猜是谁半夜动的线。第四是并发变更冲突,两个人同时改同一参数,我们做了乐观锁,后提交的必须 rebase 最新值再写,避免互相覆盖。
案例片段(已脱敏): 配置中心热加载片段: 参数
temperature标hot_reload=true,变更后网关对新请求即生效,在途请求跑完旧值;max_batch_window_ms标hot_reload=false,变更提示需重启实例。 灰度回滚日志(脱敏):新参数放 10% 实例后 P99 上涨 40%,触发回滚,切回v12配置,2 秒内全量恢复,未走发版。
参数收进配置中心后,变更平均耗时从 25 分钟(含重启)降到 1 分钟以内,调参人当天就能试完好几轮,不用等发版窗口。服务重启次数周均从 8 次降到不足 1 次,用户侧的莫名抖动基本消失,那次大客户被抖的事故再没重演。灰度失败回滚时效从重新部署十几分钟降到秒级,试错成本几乎归零。变更审计覆盖率达到 100%,每次改动都有痕,出了事十分钟能定位到人。文中数据为项目复盘口径,已做脱敏。
配置中心上线后,我们顺手把密钥、路由策略、限流阈值也一并收了进来,底座的所有可变项终于有了唯一入口。后续新模型上线,研发不再登机器改文件,全在门户里配,灰度失败一键回退成了日常操作而不是救火动作。我们还给每次变更加了影响面预估,改一个参数前系统会提示可能影响哪些服务、哪些业务,决策人心里有数才动手。变更频率上去之后,底座的迭代节奏明显快了,用户侧的抖动反而更少了,因为不用再为调参重启,半夜被叫起来救火的次数从每周好几次降到几乎为零。
灰度分批我们后来接了自动晋升,10% 实例跑一段指标平稳就自动全量,不用人守着点确认,只有指标异常才拦下来等人工。变更影响面预估也接了真实调用链,改一个参数能看出影响了哪些上游业务,决策人一眼看清范围。之前有次改批处理参数误伤了另一个业务,就是因为没看清影响面,现在系统会提前标红。配置中心成了底座的运转中枢之后,研发改东西的胆子大了、用户抖动的少了,这个反差正是我们想要的,迭代快和体验稳终于不冲突了。
配置中心现在管着底座几乎所有的可变项,研发改东西再也不用登机器,这件事本身就替团队省了大量半夜救火的时间。
配置和代码一样要能热更,靠重启发版做灰度太原始,我们那次深夜重启抖客户就是教训,而且这种事故最难堪的地方在于用户感知到了、你还在睡。热加载不是啥都能热,先把参数分类,不能热的别硬来,否则状态乱了更糟,我们一开始图省事全标热更,结果批处理状态错乱过一回,后来老实分类。回滚要当成一等公民,配置中心留几版历史,比重新部署救命多了,试错才敢放开手脚。说到底,变更频率越高,越不能靠人肉重启,自动化得把改完即生效、出错即回退焊进流程里,人只管决策不管救火。