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