跳到主要内容

限流

限流(Rate Limiting)是控制单位时间内请求数量的保护机制:超过阈值的请求被拒绝或排队,防止突发流量把服务打垮,也用于防刷和 API 计费计量。它是高可用架构里“牺牲一部分请求,保住整体可用”的核心手段。

它的工作方式

常见算法有三种:固定窗口计数实现最简单但窗口边界可能放行双倍流量;滑动窗口与令牌桶更平滑,令牌桶还允许短暂突发,是多数网关的默认选择。限流的位置可以在 CDN/WAF 边缘、反向代理(如 Nginx 的 limit_req 模块)或应用内部(如连接池、信号量)。实战中有两个易错点:一是返回状态码的选择——429 Too Many Requests 才是语义正确的答案,Nginx 限流默认却返回 503,会污染故障监控,应显式配置 limit_req_status 429,站内的 503 排障一文有专门分析;二是要配合 Retry-After 响应头与客户端的指数退避,否则被拒绝的请求会立刻重试形成放大效应。

示例

  • 1.API 网关对每个 API Key 限制每分钟请求数,超限返回 429
  • 2.登录接口按 IP 限流,缓解撞库与暴力破解
  • 3.Nginx 对下载路径限速限流,防止少数用户占满带宽