扫描件批量识别的调度,难的不是「调接口」,是几十万次调用里必然出现的长尾和失败。一次几万页的项目跑下来,调度设计的每个决策都会被放大验证。这篇拆四个关键设计。
最小调度单元选「页」还是「文档(多页 PDF)」,决定了整个批次的失败半径。按文档分片:一个 200 页的 PDF 失败,200 页全部重来;按页分片:单页失败只重试单页,但任务数量放大几十倍,队列管理开销上升。
实践结论:按页分片、按文档记账。调度粒度到页(失败半径最小),进度和计费按文档汇总。分片时给每页打上「文档 id + 页序」的复合键,聚合时靠它归组——这个键同时是幂等键的一部分。
识别服务的限流墙是批处理的常客。固定速率发送,限流后全线失败重试,再撞限流,雪崩。解法是自适应速率:
这个「加性增、乘性减」的节奏和 TCP 拥塞控制同源,在识别批处理场景实测有效。关键是退避要果断、恢复要克制——恢复太快会形成限流震荡。
几万页的批次跑几个小时,中途因为任何原因(发布、超时、网络)中断是常态,不是异常。断点续传的要点:
三类失败必须隔离,不能混在一个重试池里:
混池的代价是死循环:确定性失败的任务反复重试,把瞬时失败的合理重试额度全吃掉。
调度设计做完,用四个数字验收:单页失败半径(应为 1 页)、限流雪崩恢复时间(撞墙后 2 分钟内速率稳定)、中断恢复丢页数(应为 0)、死信占比(健康批次应低于 0.5%)。四个数字达标,几十万页的批次才敢接。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。