先给结论:灰度只覆盖了“典型路径”,全量发布却会同时触发“例外路径”。当小流量样本的 URL 集合、访问来源或时间窗口与全量不同,灰度结果就不能直接外推到全量。判断的关键不是看灰度有没有报错,而是看灰度到底覆盖了哪些域名、哪些路径、哪些解析与抓取条件。
假设某站点把主域与一个子域放在同一套域名空间里,先切 5% 流量到新配置,持续一天。灰度期间首页、栏目页、详情页都能正常打开,抓取日志也没有明显异常。但全量切换后,出现一批“本应可访问却返回异常”的 URL。这个反差本身就说明:灰度样本没有触达全量的例外集合,而不是全量一定配置错了。
此时不要先改配置,而要先做一件事:从全量异常 URL 中抽取少量样本,记录它们的完整主机名、路径、协议、解析结果和返回状态。这个动作的结果会直接决定下一步——如果异常集中在某个子域或某类路径,问题就在域名空间的覆盖范围;如果异常分散且与路径无关,才需要回到解析、证书或服务端策略上查。
灰度常只挂主域,全量却包含多个子域、别名域或历史遗留域。每个主机名在域名空间里是独立对象,解析记录、证书覆盖和抓取策略都可能不同。核对方法:把灰度期间实际收到请求的主机名列出来,再与全量发布涉及的主机名清单做差集。差集里的主机名就是灰度未验证的部分。
灰度流量小,往往只命中高频路径;全量会带来低频但数量庞大的路径,例如带参数的筛选页、分页、大小写变体或末尾斜杠变体。这些变体在域名空间里可能被当作不同 URL 处理。可核对的证据是:对比灰度与全量期间被抓取 URL 的路径模式分布,而不是只看总抓取量。
灰度可能只来自内部或少量外部来源,全量则混合搜索引擎、平台推荐和直接访问。不同来源触发的请求头、协议版本和跳转链路不同,可能暴露灰度没遇到的例外。时间窗口也重要:灰度只跑一天,可能没覆盖缓存过期、证书续期或定时任务切换的时点。
两类解释都成立,需要证据分开:
注意,抓取量或请求量归零本身不能单独证明处理正确。它也可能是抓取预算转移、日志采集中断、缓存命中改变或来源结构变化造成的。要结合主机名差集和路径模式分布一起看。
建议动作:在全量发布前,按主机名和路径模式分层抽样,而不是只按总流量比例抽样。结果分两种:
还要单独核查:robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。不同搜索引擎对这些的支持情况须分别核查,不能拿一个引擎的灰度结果推断另一个。
一次灰度暴露的例外,价值在于它指出了域名空间里哪些对象没有被纳入常规验证。把这次异常的主机名、路径模式、来源和时段记录成检查项,下次灰度分层时直接复用。这样做的结果不是保证不再出例外,而是让下一次全量发布前,你能明确说出“哪些部分已验证、哪些部分仍未验证”,而不是用总流量比例掩盖覆盖缺口。