API 限流与配额管理:令牌桶、并发控制与优雅降级
限流数据集成监控告警ERPAPI 编排
先搞清楚平台的限制长什么样
国内主流平台的限流通常是多维度的:
- QPS/并发限制:单应用每秒最多 N 次调用,超限直接报错(如返回
429或平台自定义限流错误码); - 日调用量配额:按应用 + API 维度统计当日总调用数,用完后当天无法再调;
- 阶梯惩罚:持续超限可能触发账号降权、接口封禁,后果远比一次报错严重。
不同平台、不同 API 的限制差异很大,接入前务必以官方文档为准,并把限制值做成配置而不是常量写死。
令牌桶:客户端限流的标准件
令牌桶以固定速率生成令牌,每次调用前取一枚,取不到就等待。它的好处是平滑 + 允许突发:平时攒下的令牌可以应对大促同步这类短时高峰。
text
容量 C = 平台 QPS × 2(允许少量突发)
速率 R = 平台 QPS × 0.8(留出 20% 安全余量)
工程上的两个关键点:
- 限流要放在全局,而不是每个线程各自限速。多实例部署时用 Redis 实现分布式令牌桶,或退而求其次按实例数均分配额;
- 并发数也要控。QPS 达标但瞬时并发过高,同样会触发平台网关拒绝,建议信号量控制在平台建议值以内。
配额预算:把日调用量当钱花
日配额制平台要防止"上午把额度花光、下午订单同步停摆"。做法是给每条链路分配预算:
| 链路 | 预算占比 | 超限策略 |
|---|---|---|
| 订单拉取(核心) | 50% | 永不限流,必要时借调公共池 |
| 库存回传(核心) | 20% | 降频但不停 |
| 商品/主数据(非核心) | 15% | 超限暂停,次日恢复 |
| 对账/报表(离线) | 15% | 只在低峰时段运行 |
优雅降级:被限流时怎么办
被限流不应该是异常告警,而是预期内事件:
- 识别平台限流错误码,与真实业务错误区分开;
- 指数退避重试(1s、2s、4s……带上限与抖动),避免重试风暴加重限流;
- 非核心链路自动降频或暂停,把额度让给订单等核心链路;
- 积压超过阈值才告警,告警内容带上积压量与预计追平时间。
轻易云平台的连接器内置了按平台维度的限流规则库与配额看板,链路被限流时自动退避并在控制台可视化呈现,接入方无需为每个平台重复造轮子。
本文为原创内容,转载请注明出处:/insights/engineering/api-rate-limit-quota