IOSOR 知识库

从试点到生产的 API 限流:退避而不烧掉预付钱包

试点与生产限流、指数退避、幂等、沙箱与生产密钥、有界 webhook 重放窗口——重试不会掏空 prepaid。

429 不是把发送 API 砸到通过为止。Prepaid 上重试风暴是钱包事件:重复 OTP、堆叠告警、对不上的账本行。限流让产品、工程与财务共用一个天花板。从试点到生产不是「去掉上限」——是约定限流、尊重幂等的退避、分开的沙箱与生产密钥、不会二次借记的 webhook 重放窗口。对照 幂等、重试与资金安全。

IOSOR 是 white-label prepaid:鉴权调用、可对账借记、从不倾倒外品牌载荷的客户安全错误。目录 live / in setup 与你重试多狠无关——走廊仍 in setup 不会因为客户端循环而变成 Live。月用量接近 USD 1,000+ 时,重试预算与密钥切换进入商务复盘。同一本手册放 沙箱密钥切到生产 与 webhook 签名与重放窗口。

限流保护 prepaid,不是故障

限流约束每个窗口有多少被接受的意图打进钱包——不是负载均衡器做了多少 TCP 尝试。写明窗口(按密钥、账户、目的地类)、状态码与 Retry-After。把 429 当「再用力」的客户端在和财务赛跑。把限流拒绝与成功借记一起导出。目录 live 仍停在公布天花板;in setup 不是无限沙箱。

信号 工程 钱包
429 / Retry-After 退避,遵守窗口 同一意图零额外借记
5xx / 超时 预算内用同一幂等键重试 若首次已落地则一笔借记
4xx 业务拒绝 不要盲目重试 无借记或具名拒绝行

退避且不二次借记:限流配幂等

没有幂等键的指数退避,会把抖动网络变成两条 OTP、两笔告警、两行对不上的账本。键按业务意图唯一,不是按 TCP 尝试,并在明确 TTL 内返回同一已接受结果。用户点「再发一次」是另一产品动作,走自己的限流,不得混进自动重试预算。低余额停止仍生效:重试不得打穿空钱包。把 429 与成功借记一起导出,而不是只看 HTTP 200 计数。

试点限流对比生产限流

试点密钥应更紧:低量、错误便宜、Retry-After 立刻可见。生产限流按你真正跑的走廊约定,提高天花板是带负责人的账户变更,不是客户端改超时。压测属于沙箱密钥;生产密钥做浸泡测试是烧掉 prepaid。走廊仍 in setup 时不要承诺生产 QPS。试点通过不等于生产去掉上限——是同一套幂等与拒绝语义,换成更高窗口。

密钥与 webhook 重放同一次切换

发送限流救不了二次处理 DLR 的 webhook 消费者。切换:冻结沙箱流量、签发生产密钥、把 webhook 指到生产消费者、校验签名、限定重放窗口,然后发一个真实意图。02:00 的重放回调应是空操作,不是第二笔借记。密钥分开;永远不要贴进工单。

危险信号

  • 没有幂等键却「重试到 200」
  • 把 429 当软 200
  • 压测用生产密钥,或生产里用沙箱 webhook URL
  • 重放窗口按周计,或「试点」接受未签名回调
  • 用户重发混进自动重试预算
  • 面向客户的错误倾倒原始上游代码

开始使用 IOSOR

写明限额窗口——按密钥、账户或目的地类别——以及你会遵守的 Retry-After。强制一次 429,退避,再用同一把 Idempotency-Key 重试同一意图。ledger 只能有一笔 debit。抬高上限之前,先把沙箱密钥换成生产密钥。

幂等、重试与资金安全 沙箱密钥切到生产

IOSOR 要点

要做:把 429 当成带 Retry-After 的暂停,不是软成功。每次退避都带上原来的键,让预付只看见一个已接受意图。

不要:用压测密钥去抬生产限额,或不带键一直打到 200,把钱包打成额外用量。

这篇指南有帮助吗?

相关指南