小流量灰度只验证了“被选中的那部分 URL 能走通”,如果全量发布时会新增灰度中不存在的 URL、参数或子域,灰度通过并不能推出全量提交有效。要让灰度结论成立,前提是灰度集合与全量集合在“提交对象”这一维度上同构;一旦全量多出灰度从未覆盖的类别,例外就会在放量后集中出现。
灰度通常按比例或按目录抽样提交,比如只推送主站文章路径,或只取 sitemap 的前若干条。它检验的是这条链路上的抓取、解析和入库是否正常,而不是“所有会被提交的 URL 都正常”。
因此要区分两件事:
灰度能证明第一件事,第二件事需要额外核对。很多“灰度没问题、全量出问题”的情况,本质是第二件事从未被验证。
假设一个站点按目录灰度,只提交 /article/ 下的 URL。灰度期间这些页面全部正常被抓取,团队据此认为提交逻辑已经可靠,随后全量放开。
但全量集合里还包含 /tag/ 聚合页、带 ?page= 的分页参数、以及新上线的子域。这些类别在灰度中一条都没出现过,于是放量后出现三类例外:
这个反例说明,灰度通过只能说明“已覆盖类别没问题”,不能说明“未覆盖类别也没问题”。例外恰恰集中在灰度没有抽到的部分。
发现全量提交后收录不及预期时,不要直接改配置。先按可区分证据归类:
站点地图不保证收录,提交也不保证收录;这些现象只能作为线索,不能单独作为结论。抓取量或提交量归零,也可能是采集延迟、日志采样或统计口径变化,而不一定是处理错误。
与其按比例抽样,不如按 URL 类别抽样,让灰度集合覆盖全量会出现的每一种形态。具体动作:
这样做的结果是:当某类 URL 出现例外时,你能立刻判断它是“灰度没覆盖”还是“链路真的坏了”,从而决定是补抽样还是改配置。灰度是否通过,取决于它是否覆盖了全量会出现的例外类别,而不是取决于比例大小。