先保住已经拿到的数据,再决定是否重试。限流发生时,最危险的动作不是停止调用,而是让脚本继续空转、覆盖旧文件或把不完整结果当成完整结果写入。对读者手里的一个资料或页面来说,可执行的处理顺序是:立即停止新请求,锁定并备份当前输出,标记哪些字段完整、哪些缺失,再根据缺失范围决定补采、降速还是改用人工核对。
同样表现为“没有新结果”,原因可能完全不同。可核对的证据至少有三类:
这三类证据要分开记录。请求失败不能单独证明是限流,也可能是输入格式错误、目标页面结构变化或本地网络中断。反过来,结果变少也不能单独证明工具被限流,可能只是本次查询条件比上次更窄。
假设你手里有一个页面清单,脚本原本每天追加一次查询结果。现在调用开始间歇失败,你要做的第一件事不是重跑,而是把现有输出复制成带时间标记的快照文件,并保留原始输入清单。动作可以具体到:
这样做的结果是:后续无论补采成功还是失败,你都能回到限流发生前的状态。若跳过这一步,下一次重试一旦只返回部分数据,旧结果可能被覆盖,后面连“哪些行原本有值”都说不清。
很多人遇到限流的第一反应是把等待时间调大,然后继续跑全量。更稳妥的做法是先缩小范围,用一小批输入验证是否恢复。可以选择原清单中字段最完整的一页或一条记录,单独调用一次,观察返回结构是否与快照一致。
如果小批调用成功,下一步不是立刻恢复全量,而是按优先级分批:先补缺失字段最多的记录,再补缺失较少的记录。每批完成后立即写入新文件,不覆盖快照。若小批调用仍然失败,说明当前限制还没解除,此时继续重试只会拉长失败日志,对恢复没有帮助。
这里有一个明确假设的短例子:假设原清单有 100 条记录,快照中 60 条字段完整、40 条缺少部分字段。限流后小批测试 5 条成功,那么可以先补那 40 条中优先级最高的 10 条,而不是直接重跑 100 条。补完后对比快照,确认新增字段没有改变原有字段的值,再决定是否继续下一批。
补采完成后,你可能会看到与直觉相反的结果:新返回的数据比快照少,或者某些字段值变了。这时不要直接认定是限流导致数据丢失。更合理的做法是做一次对照:
如果同一字段在两份结果中不一致,优先检查输入参数和查询范围是否相同,而不是先归因于工具限流。限流通常影响的是“能不能拿到”,不一定改变“已经拿到的值”。把这两类问题混在一起,后续补采计划会失准。
出现以下情况时,继续调脚本的收益很低:连续多批小范围调用都失败;失败原因无法从日志区分;缺失字段集中在需要人工判断的页面内容上。此时更实际的动作是把待补清单导出,按页面逐条核对,并记录核对时间和来源。人工核对的结果同样要写入新文件,不覆盖快照。
需要说明的是,不同工具的限流表现、恢复时间和调用方式并不相同,具体限制条件需要以你实际使用的工具说明和日志为准。本文给出的顺序是保护已有结果的处理框架,不是对某一工具当前功能的断言。只要快照还在、缺失范围清楚,后续无论换调用方式还是改人工处理,都有可核对的起点。