用途:为 API 实现请求限流、配额管理与滥用防护,控制客户端请求速率、保障公平使用并在高负载下卸载流量。
主要能力:
- 算法选型对比:固定窗口、滑动窗口日志、滑动窗口计数器、令牌桶、漏桶、GCRA,按突发容忍度、精度、内存占用给出适用场景。
- 令牌桶实现:容量为最大突发、refillRate 为持续速率,惰性补充无需后台定时器;示例
new TokenBucket(10, 100 / 60)表示持续 100 请求/分钟、突发 10。 - 分布式限流:指出 INCR 后 EXPIRE 的丢失 TTL 与 TTL 重置问题,改用原子 Lua 脚本;高并发下排序集合成员需唯一,建议用单调计数器或请求 UUID 替代 math.random()。
- GCRA:单值 TAT 存储,适合高基数键,redis-cell 的 CL.THROTTLE 即其实现。
- Redis Cluster:多键或 Lua 跨键需用哈希标签
{ratelimit:${userId}}:counter保证同槽,否则报 CROSSSLOT。 - 失败策略:fail-open 与 fail-closed 按端点选择,记录回退日志并加本地兜底限流。
- 多窗口配额:分钟与天级同时递增,严格正确用 Lua,可容忍少量超计用 pipeline。
- 分层限流:ip → api-key → user → global,取最严格者。
- 429 契约:同时输出 IETF 草案 RateLimit-* 与旧版 X-RateLimit-*,429 必须带 Retry-After;成功响应也应带限流头。
- Express 中间件形态、客户端按 Retry-After 与抖动退避重试、Nginx/Kong/Envoy/AWS API Gateway 网关限流、自适应限流、优先级卸载与熔断等进阶模式。
使用方式:作为技能文档参考,按算法选型、原子实现、响应头契约、代理信任配置等清单逐项落地。
限制:文档未提供具体安装命令、包名、版本或价格信息;示例为 TypeScript/Redis 片段,需结合自身技术栈调整。