网关超时后 SDK 自动重试 3 次,账单里同一个问题出现 3 条计费记录,一次故障多花 40 元。日志里能对上时间点,这种反而好排。
重试没有区分请求是否已被上游受理,超时并不等于没执行。每次重试都是新的计费请求,输出 token 也重复计。这一点先确认清楚,后面就不用反复试。
curl -H 'Idempotency-Key: req-20261114-01' https://api.example.com/v1/chat -d @req.json
「重试重复计费」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:只对连接失败和 5xx 重试 超时不盲目重试;开启请求级幂等头让上游去重;重试次数降到 1 次并加退避;对账时按 request_id 去重核对。
结果对不对很好判断,同一次故障只产生一条计费记录 账单金额回到正常区间。
