小流量灰度能提前暴露全量发布时的抓取例外,但它只能证明“这批被放行的 URL 在观察窗口内表现正常”,不能证明全量发布后所有 URL 都正常。灰度样本若只覆盖主路径、不含参数页和边界路径,例外往往被平均值掩盖。可行的最小动作是:在灰度期间按路径类型分别记录 Baiduspider 的抓取状态码与频次,再和未放行的对照组比。差异出现在哪一类路径上,全量发布前就要先处理哪一类。
决定灰度结论能否外推,关键不是样本量大小,而是样本是否覆盖了发布后会改变行为的路径类型。可用一个简单判据:如果灰度放行的 URL 全部来自同一模板、同一参数结构,那么它对全量发布的预测力有限。
一个假设例子:某站灰度放行 200 条 URL,其中 190 条是无参数详情页,10 条是列表页。灰度期间 Baiduspider 对这些 URL 的抓取全部返回 200。全量发布后,带 ?page= 的分页路径因规则改写返回 302 到首页。灰度没有覆盖这类路径,因此没有暴露该例外。这里的数字只用于说明覆盖结构,不代表任何真实站点数据。
灰度期间若只统计“Baiduspider 总抓取次数”,一个路径类型的异常会被另一类型的正常量抵消。正确做法是把日志按路径模板分组,分别看状态码分布和抓取频次变化。
动作与结果的关系是:如果差异集中在某一类型,全量发布前就应先修正该类型的发布规则,再扩大放行范围;如果各类型差异都不明显,才可以把灰度结论作为扩大放行的依据。这一步的结果直接决定下一步是“修规则”还是“扩量”。
灰度或全量发布后,若某类路径的 Baiduspider 抓取量下降,发布改动只是可能原因之一。以下情况同样会造成下降,需要先排除再下结论。
这里要区分两件事:robots.txt 的抓取限制不等于可靠的索引移除,抓取量归零也不能单独证明发布处理正确。判断发布是否引入例外,需要同时看状态码是否变化、响应时间是否变化,以及同类型对照组是否也同步下降。若对照组同步下降,更可能是外部或采集因素,而非发布本身。
条件一:灰度覆盖了全部关键路径类型,且各类型状态码与对照组一致。此时可以把灰度结论用于全量发布,但仍需在全量发布后保留一段观察窗口,按同样分组继续记录,确认放量后没有出现新的路径类型例外。
条件二:灰度只覆盖部分路径类型,或某类型缺少对照组。此时不应把灰度正常当作全量安全的依据。应先补齐缺失路径类型的灰度放行,或针对该类型单独做一次小范围验证,再决定是否全量。
两种条件的分界点在于“路径类型是否齐备”,而不是“灰度 URL 数量是否够多”。数量再多,若类型单一,仍无法暴露其他类型的例外。
没有服务器日志读取权限、或只能拿到部分访问数据时,仍可执行以下最小动作:在灰度期间用可访问的日志或统计入口,按 URL 路径前缀做一次抓取状态计数,至少区分 2xx 与 3xx/4xx。这个动作不能推出“全量发布一定安全”,也不能推出“未被记录的路径没有问题”,但能回答一个具体问题:灰度放行的路径类型里,是否已经出现状态码层面的例外。若出现,先修该类型;若未出现,只说明已覆盖类型在观察窗口内正常,未覆盖类型仍需另行验证。
灰度是缩小范围的验证手段,不是全量发布的通行证。把路径类型分组、把对照组保留、把抓取量变化的多重解释排除掉,才能让一次小流量测试真正回答全量发布会不会出现例外。