灰度发布只覆盖了一小部分请求,却可能暴露全量发布后才会出现的例外:某个旧页面、旧接口或旧合作关系仍在被访问,而它在灰度样本里恰好没有出现。要处理这类例外,不能直接全量切换,应先把灰度期间的日志、状态码和引用来源整理成可执行清单,再决定哪些旧内容保留、哪些退出、哪些需要单独适配。
灰度通常按流量比例或用户分组放量,样本看起来有代表性,但例外往往集中在低频路径上。比如一个旧页面每天只有几十次访问,灰度期间可能一次都没被命中,全量发布后却因为某个外部链接或历史书签持续产生请求。此时如果只看灰度期间的错误率,会误判为“没有异常”。
判断例外是否真实存在,可以对比三组证据:灰度期间被命中的路径列表、全量发布后短时间内出现的 4xx/5xx 状态码、以及这些请求的 Referer 或来源类型。如果某条路径在灰度中零命中,但在全量后出现稳定请求,说明它不是随机噪声,而是被灰度样本遗漏的真实入口。注意,请求量归零或抓取量下降不能单独证明处理正确,也可能是缓存、CDN 或抓取频率变化造成的。
假设你手里有一份旧版页面清单或旧接口文档,先不要直接删除。按下面步骤转成处理方案:
这个动作的结果会直接影响下一步:如果某条旧路径被标记为“保留但降级”,全量发布后它仍会返回可用内容,只是不再走新逻辑;如果标记为“退出并给出替代路径”,则需要同时准备 301 或 410 响应,并确认替代路径本身可访问。robots.txt 的抓取限制不等于可靠的索引移除,所以退出旧页面时不要只依赖 robots.txt,应结合响应状态和站内链接清理。
全量发布后出现的例外,通常可以归为三类,区分方法如下:
这三种原因对应的动作不同。如果把样本遗漏当成依赖顺序处理,可能会错误回滚已经稳定的新逻辑;如果把缓存问题当成样本遗漏,补做灰度也不会复现。因此,先看日志中的路径、状态码和来源,再决定下一步动作。
假设某高端域名注册服务在改版时保留了一条旧合作方的回调路径。灰度只放量给新注册流程,旧回调路径没有被命中。全量发布后,日志显示该路径每天仍有少量 POST 请求,返回 404。此时有两种成立条件不同的选择:
如果该合作方仍在合同期内,且回调失败会影响域名状态同步,应保留该路径并做最小适配,让它继续返回成功响应,同时记录调用来源。如果合作方已经退出,且没有未完成的订单或状态同步,可以退出该路径,但需要先确认没有定时任务在调用它,再返回 410 并保留一段时间的日志观察。
这个例子中的数字只用于说明比较方法,不代表真实流量。关键动作是:先查引用来源,再决定保留还是退出;退出时不要只靠 robots.txt,也不要假设站点地图能保证收录或移除。
在灰度转全量之前,至少完成三个动作:把灰度期间零命中的路径单独列出并补测;确认旧资料中仍被引用的条目已有明确处理标记;准备好回滚规则和日志观察窗口。这些动作的结果会决定全量发布后是否需要二次灰度,而不是一次性切换。HTTPS 不保证安全无漏洞或排名,所以不要把证书配置当作旧路径退出的替代方案。不同搜索引擎对旧路径的处理支持情况须分别核查,必要时应分别提交移除请求或保留可访问的替代页面。