计划失效条件不是“任务失败就停”,而是先给规则划出可验证的适用边界:当目标页面结构、字段含义或下游用途发生不可逆变化时,让任务自动停止或降级,而不是继续产出看似正常、实际已偏航的数据。下面用一个假设情境,把判断依据、动作和结果串起来。
需求变化快时,最容易犯的错是把所有波动都当成失效信号。可以按可逆程度分三类:
只有语义漂移和用途失效值得触发计划失效条件。可逆波动更适合用告警加人工确认,避免频繁停机把正常维护也打断。
假设某站点有一个“行业展会”栏目,过去靠火车头采集规则每天同步展会名称、城市和开展日期,再导入旧内容系统。现在该栏目停止更新,但其中“城市”字段仍被另一个在用的活动日历复用。
此时直接删除整条规则会连带丢掉仍有价值的城市映射;继续全量跑又会把已经废弃的展会信息反复写回。合理的做法是设置分层失效条件:
这里的动作是“先降级、再暂停、最后归档”。结果是:旧内容不再进入在用系统,但城市映射规则还能被复用,下一步只需为活动日历单独建一条轻量任务,而不必从零重写。
“需求变了”本身无法执行,必须落到规则能读取的信号上。常见可判定条件包括:
把这三类信号分别设置成“告警”“暂停”“归档”三档,比一刀切停用更可控。抓取量归零只是告警档的输入之一,不能单独作为归档依据。
失效不等于删除。对仍有部分价值的规则,建议在失效时保留三样东西:字段映射说明、最近一次可用样本、以及失效原因记录。这样当需求再次变化、旧用途部分恢复时,可以快速判断是恢复整条规则,还是只抽取其中某个字段。
一个实际动作是:在计划里增加“失效后转人工队列”的设置。任务触发失效条件后不直接清空,而是把当前批次标记为待确认,由人工决定归档、拆分还是恢复。结果是维护者不会被自动停机打断,同时也不会让过期数据继续流入下游。下一步的决策依据,就从“要不要停”变成“停哪一部分、留哪一部分”。
在触发失效前,至少排除以下可能:来源站点临时维护、请求频率过高被限流、目标页面改为需要登录、分页规则被平台调整、下游系统只是暂时不可用。这些情况都会让采集结果异常,但原因不在规则本身。
区分方法是看异常是否伴随来源侧的其他变化,以及同一规则在其他目标上是否正常。如果只有单一目标异常,优先按可逆波动处理;如果多个目标同时出现同类语义漂移,才更可能是需求层面的变化。把这一步写进失效流程,可以避免把临时故障误判为计划退出。