API 限流策略设计(免费版)
输入
| 字段 | 必填 | 说明 |
|---|---|---|
| 限流配额 limit | 是 | 窗口内最大请求数 |
| 令牌桶容量/补充速率 | 是 | capacity、refill_rate(令牌/秒) |
| 本次请求令牌数 | 是 | tokens_needed |
| 当前令牌/窗口已用 | 是 | current_tokens、count |
输出
是否放行 + 剩余配额/令牌 + 拒绝时等待秒数(Retry-After)
工作流
- 令牌桶适合允许突发的接口:当前令牌≥需求则放行并扣减,否则按缺口/补充速率算等待秒数。
- 固定窗口适合严格配额:窗口计数达到 limit 即拒绝。
- 被拒返回 429 + Retry-After,客户端按指数退避(1,2,4…封顶60秒)重试。
硬性规则
- 等待秒数=缺口令牌÷补充速率,向上取整;补充速率为0时不除零,返回不可等待。
- 剩余配额不为负,最小为0。
- 退避封顶60秒,不无限增长。
示例
令牌桶(容量10,速率1/s,需5,现有2)→拒绝,等待3秒
固定窗口(limit100,已用100)→拒绝,剩余0
Retry-After(第4次)→8秒