核心概念:限流、熔断、降级与隔离

在模型 Serving 层,稳定性保障的四个核心概念——限流、熔断、降级与隔离——构成了防御体系的基础。它们各自解决不同维度的风险,又相互配合形成完整的韧性策略。本节将逐一拆解定义,并重点分析降级与隔离的内在关系。

2.1 限流(Rate Limiting)定义

限流是一种主动预防机制,通过控制单位时间内进入系统的请求量,防止流量洪峰击穿后端服务。在模型 Serving 场景中,限流直接作用于推理请求的入口。

核心目标:保护模型推理服务不被突发流量压垮,确保在容量范围内提供稳定响应。
维度 说明 模型 Serving 典型场景
限流粒度 按用户、API Key、模型版本、IP 等维度分别限制 每个 API Key 每秒最多 100 次推理请求
限流算法 令牌桶、漏桶、滑动窗口、计数器等 令牌桶适用于突发流量,漏桶适用于平滑输出
响应行为 拒绝请求(429)、排队等待、降级响应 返回 429 Too Many Requests + Retry-After 头部
统计窗口 固定窗口、滑动窗口、分布式窗口 滑动窗口 1 秒粒度,避免边界毛刺
实践要点:模型推理通常比普通 API 更耗时,限流阈值应结合模型推理延迟和 GPU 显存占用综合设定,而非仅看 QPS。

2.2 熔断(Circuit Breaker)定义

熔断是一种被动保护机制,当下游服务(如模型推理引擎、特征存储)持续出现故障或超时时,自动切断调用链路,避免故障级联扩散。熔断器通常包含三个状态:关闭、打开、半开。

核心目标:快速失败,防止等待资源耗尽,给下游恢复时间。
状态 行为 转换条件
关闭(Closed) 正常转发请求,统计失败率 失败率超过阈值 → 进入打开状态
打开(Open) 直接拒绝请求,返回降级响应 超时窗口过后 → 进入半开状态
半开(Half-Open) 放行少量探测请求,测试下游是否恢复 探测成功 → 关闭;失败 → 重新打开
常见误区:熔断阈值设置过低会导致频繁误触发,设置过高则失去保护意义。建议初始失败率阈值设为 50%,超时窗口 30 秒,并根据线上表现逐步调优。
限流与熔断协同流程 客户端请求 限流层 熔断器 模型推理服务 通过 放行 转发 降级响应 限流触发 熔断触发 返回降级结果 说明: 限流在入口处主动拦截超额请求,熔断在调用链中被动切断故障链路,两者共同减少对模型服务的冲击。 降级响应是两者的兜底行为,确保客户端不会无限等待。

2.3 降级(Degradation)定义

降级是在系统资源不足或依赖服务故障时,主动牺牲部分功能或精度,以保障核心业务可用的策略。在模型 Serving 中,降级通常表现为以下几种形式:

  • 模型降级:从高精度大模型切换到轻量级小模型(如 BERT → FastText)
  • 精度降级:降低推理精度(FP32 → FP16 → INT8),减少计算开销
  • 功能降级:关闭非核心特征(如去除后处理、日志增强)
  • 数据降级:使用缓存结果替代实时推理,或返回默认值
关键原则:降级必须是可感知的、可回退的。每次降级操作都应记录日志,并在监控面板上标记当前降级等级。

2.4 隔离(Bulkhead)定义

隔离是一种资源分区策略,将系统划分为独立的资源池,防止一个分区的故障或资源耗尽影响到其他分区。隔离的核心思想是“不把鸡蛋放在同一个篮子里”。

隔离维度 实现方式 模型 Serving 示例
线程池隔离 每个模型或租户使用独立线程池 模型 A 的线程池满,不影响模型 B 的推理
进程/容器隔离 不同模型部署在不同容器或进程中 GPU 显存隔离,防止模型间资源争抢
队列隔离 每个优先级或租户使用独立请求队列 VIP 用户队列与普通用户队列分离
集群隔离 不同业务线使用独立集群 在线推理集群与离线批处理集群分离

2.5 降级与隔离的关系

降级与隔离是互补而非替代的关系,两者共同构成系统的韧性底座:

  • 隔离提供边界,降级提供行为:隔离划定了故障的影响范围,降级定义了在边界内如何应对。
  • 隔离是静态结构,降级是动态策略:隔离在部署时确定,降级在运行时触发。
  • 隔离防止扩散,降级保障可用:隔离阻止故障蔓延到其他分区,降级确保当前分区仍能提供有限服务。
典型配合场景:当模型 A 所在容器(隔离)出现显存溢出时,系统自动将模型 A 的请求降级到轻量模型(降级),同时模型 B 所在容器完全不受影响。
降级与隔离的关系架构 隔离(Bulkhead)— 资源分区 分区 A 模型 A(高精度) 线程池:10 显存:4GB 分区 B 模型 B(轻量) 线程池:5 显存:1GB ⚠ 显存溢出 降级(Degradation)— 动态策略 步骤 1:检测分区 A 显存超限 触发降级策略 步骤 2:模型 A 降级到 FP16 显存占用降低 40% 步骤 3:若仍超限,切换轻量模型 模型 A → 模型 B 降级 步骤 4:分区 B 不受影响,继续服务 隔离生效,故障未扩散 触发 核心关系: 隔离划定故障边界(分区 A 故障不影响分区 B),降级定义边界内的自救行为(模型 A 降级到轻量模型)。

2.6 四者协同总结

概念 触发时机 作用范围 典型动作 与模型 Serving 的关联
限流 请求到达时 入口层 拒绝超额请求 保护 GPU 推理不被突发流量打满
熔断 下游持续故障时 调用链路 切断请求转发 防止推理引擎雪崩
降级 资源不足或故障时 服务内部 切换模型/降低精度 在资源受限时继续提供推理能力
隔离 部署时静态定义 资源分区 独立线程池/容器 确保多模型共存时互不干扰
设计原则:四者应形成“限流在外、熔断在中、降级在内、隔离在底”的纵深防御体系。缺少任何一个环节,系统的韧性都会出现短板。