限流基础概念

限流(Rate Limiting / Throttling)是模型服务治理中最基础、最前置的防御手段。它的核心思想是:在单位时间内,只允许系统处理预定数量的请求,超出部分的请求直接拒绝、排队或降级,从而保护后端资源不被突发流量冲垮。

什么是限流

限流是一种主动的流量控制策略。它不关心请求是否合法、是否重要,只关心“当前时刻的请求量是否超过了系统预设的阈值”。一旦超过阈值,限流器就会按照既定规则(直接拒绝、等待排队、丢弃等)处理多余的请求。

关键理解:限流不是“系统扛不住才触发”,而是“在系统还能正常处理时,主动限制入口流量”,确保系统始终运行在安全水位内。
限流核心概念示意 请求入口 限流器 阈值:100 req/s 后端服务 被拒绝的请求 说明:限流器根据预设阈值判断,未超限的请求放行至后端,超限的请求直接拒绝,避免后端过载。

限流的目的与作用

限流不是为了让系统“变慢”,而是为了让系统“更稳定”。在模型服务场景中,限流承担着以下核心作用:

目的 具体作用 典型场景
保护后端资源 防止突发流量打满 GPU/CPU 算力,避免 OOM 或长时间阻塞 大模型推理服务、批量推理任务
保障服务质量 控制并发数,确保每个请求都能获得合理的响应时间 在线 API 服务、实时对话系统
公平分配资源 防止某个客户端或用户独占服务资源 多租户模型平台、API 网关
成本控制 避免因流量激增导致云资源费用失控 按量计费的推理服务、Serverless 部署
防止级联故障 在依赖的下游服务变慢时,主动限流避免自身被拖垮 模型服务调用外部 API、数据库查询
实践要点:限流阈值不是拍脑袋定的。通常需要结合压测数据、历史流量峰值、SLA 要求来综合设定。建议设置“安全阈值”和“告警阈值”两层,安全阈值用于限流,告警阈值用于提前预警。

常见限流场景

在模型服务体系中,限流几乎无处不在。以下三个场景是最典型、最需要关注的限流切入点:

1. API 调用限流

这是最外层的限流防线,通常部署在 API 网关或反向代理层。针对每个 API 端点、每个用户、每个 IP 或每个 API Key 设置独立的调用频率限制。

  • 粒度:按用户/应用/API Key 分别计数
  • 典型阈值:1000 次/分钟、100 次/秒
  • 响应方式:返回 HTTP 429 Too Many Requests,附带 Retry-After 头部
  • 模型服务特例:大模型 API 通常按 Token 消耗量限流,而非仅按请求次数

2. 推理请求限流

这是模型服务内部的核心限流点。推理请求往往消耗大量 GPU 算力和显存,一旦并发过高,轻则推理延迟飙升,重则显存溢出导致进程崩溃。

  • 粒度:按模型实例、按 GPU 卡、按推理引擎进程
  • 典型阈值:最大并发推理数(如 8 个并发)、最大排队长度(如 64 个请求)
  • 响应方式:请求排队等待、返回 503 Service Unavailable、丢弃请求
  • 模型服务特例:动态批处理(Dynamic Batching)场景下,限流需与批处理策略协同

3. 资源争抢限流

当多个模型服务或推理任务共享同一组硬件资源(GPU、CPU 内存、网络带宽)时,需要限流来防止某个任务“饿死”其他任务。

  • 粒度:按模型优先级、按任务类型、按资源池
  • 典型阈值:GPU 显存使用率 > 90% 时触发限流、CPU 负载 > 80% 时降级
  • 响应方式:低优先级请求排队、高优请求优先通过、非核心任务降级
  • 模型服务特例:多模型混合部署时,需为每个模型分配最小资源保障
三种限流场景对比 API 调用限流 • 网关层 / 反向代理 • 按用户 / IP / Key • 返回 429 + Retry-After • 可结合 Token 消耗 推理请求限流 • 模型实例 / GPU 卡 • 最大并发 + 排队长度 • 返回 503 / 排队等待 • 与动态批处理协同 资源争抢限流 • 共享 GPU / 内存 / 带宽 • 按优先级 / 资源池 • 高优通过 / 低优排队 • 多模型混合部署 共同目标:保护系统稳定运行,保障服务质量,防止级联故障 区别在于限流的位置、粒度、触发条件和响应方式不同 外层防御 核心防御 兜底防御
常见误区:不要认为“限流就是拒绝请求”。在模型服务中,合理的限流策略应该配合排队机制和降级策略。例如,当推理请求超过并发上限时,可以让请求进入等待队列,而不是直接丢弃。只有当队列也满了,才触发拒绝。这样既能保护系统,又能最大化吞吐量。

限流与模型服务的特殊关系

相比传统 Web 服务,模型服务的限流有以下几个显著特点:

维度 传统 Web 服务 模型服务
资源消耗 CPU 密集型或 IO 密集型,资源消耗相对可预测 GPU 算力 + 显存,资源消耗与输入输出长度强相关
限流指标 QPS(每秒请求数)、并发连接数 QPS + 输入 Token 数 + 输出 Token 数 + 显存占用
响应时间 通常毫秒级,波动较小 可能从毫秒到分钟级,波动极大(受模型大小、输入长度影响)
排队策略 简单 FIFO 队列即可 需考虑优先级、批处理窗口、超时时间等复杂策略
降级方案 返回缓存结果、静态页面 返回简化模型结果、降级为小模型、返回默认回复