先保住已经拿到的数据,再决定是否继续调用。限流发生后,不要立刻重跑整个任务,而应把已成功返回的结果落盘、标记未完成区间,然后用低频重试或人工补数替代原来的高频脚本。是否保留、改写还是退出,取决于限流是临时配额波动、脚本行为触发,还是工具接口策略已经改变。
限流本身不是单一原因。对已有业务的脚本来说,至少要先区分三种情况:
这三种情况的共同动作是:先把已经返回的数据写入本地文件或数据库,并记录每条结果对应的查询对象、调用时间和状态。不要只保留最终汇总表,因为汇总一旦缺失部分区间,后续无法判断哪些对象需要补查。
限流出现后,第一反应通常是重试。更稳妥的顺序是:
这个动作会直接影响下一步:断点清晰时,低频重试只需补少量对象;断点模糊时,只能整批重跑,反而更容易再次触发限制。
如果确认限流来自脚本自身的调用方式,改写比退出更合适。可调整的方向包括降低并发、拉大请求间隔、把大批量拆成多个小批次、对失败请求采用递增等待。这里的关键不是把间隔设成某个固定数字,而是让调用节奏低于当前限制的触发条件。
假设一个任务原本一次提交两百个对象,限流后每次只提交二十个,中间留出等待时间。结果可能是总耗时变长,但成功返回的比例更稳定。下一步应观察补查批次是否还会被限制:如果小批次仍被拦截,说明问题不在批量大小,而应转向核对权限或调用方式。
需要说明的是,具体工具对并发、频率和重试的容忍范围并不相同,也没有通用安全值。实际限制需要以当前工具返回的信息和自身账号权限为准,不能照搬他人的参数。
退出高频脚本并不等于放弃已有结果。出现以下条件时,退出比继续改写更合理:
退出后的动作是把已有结果整理成可读的快照,注明采集区间和缺口,再决定是人工补查、延后处理,还是改用其他方式获取同类信息。这样即使脚本停用,已有结果仍然能支撑一部分判断。
保护已有结果的最终目的,是让后续任务能接着做。比较实用的做法是给每批结果加三个状态字段:成功、失败、未执行。执行人员拿到清单后,只需处理失败和未执行部分,不必重新核对全部对象。
如果限流反复出现,还应把“本次调用是否完整”作为交付前提写进流程:不完整的结果可以用于观察趋势,但不宜直接当作完整基线。至于具体工具当前的配额、返回字段和限制规则,需要在使用前核对最新说明,不能依据旧经验直接推断。
限流发生时,先落盘、再标记断点、最后按原因选择低频重试、改写节奏或退出,这条顺序比单纯重跑更能保住已有结果,也更容易让下一步工作接得上。