用途:在实现限流、节流或 API 配额时使用,通过限流、节流与配额管理保护 API 和服务,应对 DDoS、暴力破解、资源耗尽、云 API 成本超支与级联故障,并实现公平分配、性能可预期、成本控制与 SLA 执行。
主要能力:覆盖多种限流算法。令牌桶按固定速率补充令牌、请求消耗令牌,允许受控突发;漏桶让请求排队并以固定速率处理,平滑流量不允许突发;固定窗口按固定时间窗口计数,简单省内存但存在边界突发问题;滑动窗口日志记录每个请求时间戳,精确无边界问题但内存占用高;滑动窗口计数器用当前与上一窗口加权平均,近似但内存高效,多数场景平衡最佳。另含算法选择指南,按突发处理、内存、精度与适用场景对比。
分布式限流:单节点内存计数简单,多节点需协调,否则各节点独立计数会突破总限额。模式包括集中式(如 Redis 存计数器,准确一致但有依赖、延迟与单点故障)、本地加同步(每节点分配限额比例,周期性同步重平衡)、粘性会话(按 IP 或 API key 路由到同一节点,简单但负载不均、故障切换复杂)。Redis 实现可用 EVALSHA 执行令牌桶脚本。
使用方式:向客户端返回标准限流响应头,如 X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset,限流时加 Retry-After;或用草案标准 RateLimit-Limit、RateLimit-Remaining、RateLimit-Reset。超限返回 429 Too Many Requests,含 Retry-After 与 JSON 错误体(code、message、retry_after、limit、window)。支持多级限流:全局、按租户、按用户、按端点逐层收紧。配额管理与限流不同:限流是每时间窗口请求数,配额是周期总量。
适用场景与限制:适用于 API 防护、算法选型、分布式限流设计、配额管理与防滥用。最佳实践包括优雅降级(降质、排队、返回缓存、允许带惩罚的突发)和客户端指数退避重试。需测试突发、持续高流量、时钟偏移、限流恢复与多客户端类型。具体配置值、价格与实现细节文中仅以示例给出,实际部署需结合环境验证。