限流发生时,先不要重试,也不要让脚本继续跑。把最近一次成功返回的原始响应、请求参数和游标位置保存下来,再决定是等待、拆分任务还是改用导出文件。这样即使后续调用全部失败,已有结果仍然可用,也不会因为反复触发限流而扩大影响。
限流后的混乱,往往来自团队对“已经取到多少”理解不一致。写脚本的人看的是内存里的列表,看报告的人看的是上次导出的文件,核对的人只看到日志里最后一条成功记录。要先把边界固定成可核对的事实。
对读者手里的一个任务目录,建议至少保留三类东西:原始响应文件、请求参数记录、进度游标。原始响应不要只留解析后的字段,因为限流后你可能需要重新解析;请求参数决定这批数据对应哪个时间窗、哪个筛选条件;游标或分页标记决定下一次从哪里继续。三者缺一,已有结果就很难被独立复核。
一个实际动作是:在脚本里把每次成功响应的原始内容按请求序号落盘,文件名中包含任务标识和序号,同时把对应参数写入同目录的清单文件。这样做的直接结果是,限流发生后你不需要重新调用就能确认已覆盖的范围,下一步只需判断缺口在哪一段,而不是从头再跑一遍。
同样表现为请求被拒,原因可能完全不同,处理方式也不一样。至少先区分以下三种:
区分方法不靠猜:把失败请求和成功请求的参数、时间、接口路径放在一起比较。如果失败只出现在某类参数上,优先怀疑权限或参数;如果失败与时间密度相关,优先怀疑频率;如果失败与累计次数相关,优先怀疑配额。这个判断会直接决定下一步是等待、拆分还是改参数,而不是盲目重试。
限流期间最该避免的是让脚本继续写同一个结果文件。一旦中途失败,文件可能处于半写状态,反而破坏原本完好的数据。建议按以下顺序处理:
这样做的结果是把“不确定的当前状态”变成“确定的快照加明确的缺口”。下一步无论是等待配额恢复,还是改用平台导出功能补齐,都有明确的比对基准。假设一个任务计划抓取十个时间窗,限流发生在第七个窗口,那么快照应覆盖前六个窗口,断点记录第七个窗口的起始参数,缺口就是第七到第十个窗口。这个假设只是说明比较方法,实际范围以你手中的记录为准。
多个角色对同一事实理解不同,通常是因为各自看到的是不同层级的产物。写脚本的人看到的是调用日志,做分析的人看到的是汇总表,负责人看到的是结论。限流之后,这三者之间的差异会被放大。
可操作的做法是建一个最小核对单元:一份快照文件、一份参数清单、一份缺口说明。三方围绕这三样东西对齐,而不是围绕“应该已经跑完了”这类判断。核对时只回答三个问题:已覆盖哪些范围、缺口对应哪些参数、恢复后写入哪个新文件。回答完这三个问题,分歧就变成了可以逐项确认的清单。
需要提醒的是,请求量下降或抓取量归零,不能单独证明限流已经解除或处理正确。它也可能是脚本已停止、任务被暂停、筛选条件变化等原因造成的。判断恢复是否可行,仍要回到一次小范围试探调用的结果上。
三种恢复方式各有适用条件,选择依据是缺口大小和额度情况,而不是习惯。
选择之后要留下一条记录:用了哪种方式、依据是什么、缺口是否已闭合。这条记录会让下一次遇到同类问题时不必重新争论,也让已有结果在限流结束后仍然可以被信任。