首页/AI/大模型部署与运维速查/限流:Nginx 令牌桶入门

限流:Nginx 令牌桶入门

限流在用 GPU 之前先挡住异常流量:Nginx limit_req 按 IP 或 key 做令牌桶限速;网关应用层再做租户级配额与并发控制,两级配合。

限流要在用 GPU 之前

限流的价值是把异常流量挡在 GPU 之前:反向代理层按 IP 或调用方标识做令牌桶限速,应用层再按租户做配额与并发控制。两级配合,既能挡住突发流量,也能保证不同调用方之间的公平。

基本信息

位置反向代理层与应用层
手段按 IP 或标识做令牌桶
关键参数速率与突发额度
限流键按租户而不是出口 IP
返回码统一回 429

典型使用场景

  • 保护后端不被突发流量打满
  • 给不同租户分配不同的速率
  • 阻断单一来源的异常刷量
  • 容量不足时优先保障关键业务
  • 把限流规则与阈值纳入版本管理,变更走发布流程
  • 按调用方的重要程度设置不同的限流档位

反向代理片段

反向代理片段
limit_req_zone $binary_remote_addr zone=llm:10m rate=5r/s;

location /v1/ {
    limit_req zone=llm burst=10 nodelay;
    proxy_pass http://127.0.0.1:8000;
}
# 应用层再按 key 做配额与并发控制,统一返回 429

各层的限流对象

层级限流对象特点
网关层IP 或连接挡住粗粒度突发
应用层租户或标识配额与公平性
并发限制同时处理的请求数保护慢请求占用
限流键决定公平性:按调用方标识或租户计数才有意义,按网关出口 IP 计数会把所有调用方算成同一个人。
限流返回码统一为 429:客户端据此退避,监控也好统计;混用别的状态码会让客户端的重试逻辑变得混乱。
限流阈值要能解释清楚:依据是后端容量与业务优先级,随口定的数字在扩容之后就不成立了。
限流与配额是两件事:限流保护后端容量,配额面向计费与公平,两套规则要能同时生效且互不干扰。
限流触发要有可见性:只挡不报的话,容量不足的问题会被长期掩盖,直到某天连锁超时才暴露。

易错点

  • 只限速率不限并发:大量长输出的慢请求仍会把连接与 KV 占满
  • 限流键选错:按出口 IP 计数会把不同调用方混在一起,正常业务被误伤
  • 突发额度给得过大:令牌桶形同虚设,突发流量照样打到后端
  • 只在网关限流:绕过网关的内部调用不受约束,容量仍可能被打满
  • 调大阈值不看监控:后端被打满的问题会在更下层才暴露,定位成本更高

数据来源与参考

  • Nginx 官方文档:ngx_http_limit_req_module(nginx.org/en/docs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌