轻易云
注册体验

API 限流与配额管理:令牌桶、并发控制与优雅降级

· 系统管理员· 工程最佳实践· 5 次浏览· 约 2 分钟读完
限流数据集成监控告警ERPAPI 编排

先搞清楚平台的限制长什么样

国内主流平台的限流通常是多维度的:

  • QPS/并发限制:单应用每秒最多 N 次调用,超限直接报错(如返回 429 或平台自定义限流错误码);
  • 日调用量配额:按应用 + API 维度统计当日总调用数,用完后当天无法再调;
  • 阶梯惩罚:持续超限可能触发账号降权、接口封禁,后果远比一次报错严重。

不同平台、不同 API 的限制差异很大,接入前务必以官方文档为准,并把限制值做成配置而不是常量写死。

令牌桶:客户端限流的标准件

令牌桶以固定速率生成令牌,每次调用前取一枚,取不到就等待。它的好处是平滑 + 允许突发:平时攒下的令牌可以应对大促同步这类短时高峰。

text
容量 C = 平台 QPS × 2(允许少量突发)
速率 R = 平台 QPS × 0.8(留出 20% 安全余量)

工程上的两个关键点:

  1. 限流要放在全局,而不是每个线程各自限速。多实例部署时用 Redis 实现分布式令牌桶,或退而求其次按实例数均分配额;
  2. 并发数也要控。QPS 达标但瞬时并发过高,同样会触发平台网关拒绝,建议信号量控制在平台建议值以内。

配额预算:把日调用量当钱花

日配额制平台要防止"上午把额度花光、下午订单同步停摆"。做法是给每条链路分配预算:

链路预算占比超限策略
订单拉取(核心)50%永不限流,必要时借调公共池
库存回传(核心)20%降频但不停
商品/主数据(非核心)15%超限暂停,次日恢复
对账/报表(离线)15%只在低峰时段运行

优雅降级:被限流时怎么办

被限流不应该是异常告警,而是预期内事件:

  1. 识别平台限流错误码,与真实业务错误区分开;
  2. 指数退避重试(1s、2s、4s……带上限与抖动),避免重试风暴加重限流;
  3. 非核心链路自动降频或暂停,把额度让给订单等核心链路;
  4. 积压超过阈值才告警,告警内容带上积压量与预计追平时间。

轻易云平台的连接器内置了按平台维度的限流规则库与配额看板,链路被限流时自动退避并在控制台可视化呈现,接入方无需为每个平台重复造轮子。

本文为原创内容,转载请注明出处:/insights/engineering/api-rate-limit-quota

评论