TL;DR(30 秒扫完)
- 限流(Rate Limiting):入口流量控制,防本服务被打爆。作用于本服务。算法:计数器/漏桶/令牌桶/滑动窗口
- 熔断(Circuit Breaking):下游依赖保护,防下游拖垮调用方。作用于下游服务。三态机:CLOSED → OPEN → HALF-OPEN
- 降级(Fallback/Degrade):兜底策略,让系统异常下仍可用。作用于本服务对外接口。5 种类型
- 典型组合:网关限流 + 服务熔断 + 熔断后降级
- 主流工具:Sentinel(阿里,功能最全)、Hystrix(Netflix,已停维护)、Resilience4j(Java 8+)
关键结论
结论 A三者是三种独立的防护策略,不是"限流→降级→熔断"的阶段关系
结论 B熔断核心是三态机(CLOSED/OPEN/HALF-OPEN),不是简单的"切断"
结论 C降级有 5 种类型(服务/功能/数据/排队/消息),不只是"返回随机值"
结论 D三者典型组合是"网关限流 + 服务熔断 + 熔断后降级",形成三层保护
完整讲解(费曼四步)
STEP 1 · 概念
限流、熔断、降级是微服务的三大流量治理策略,防止系统被流量打爆或依赖拖垮。STEP 2 · 大白话
限流像景区限流:游客太多,门口排队长龙,限制每小时进园人数,保护景区不被挤爆。 熔断像保险丝:某个电器坏了导致短路,保险丝自动断开,防止整栋楼着火。 降级像备用发电机:主电源断了,启动备用电源保证基本供电(虽然亮度差一点)。STEP 3 · 底层
1. 限流(Rate Limiting)——作用点:本服务入口 4 大算法:| 算法 | 特点 | 缺陷 | 适用 |
|---|---|---|---|
| 计数器 | 简单,QPS 窗口重置 | 边界突发问题(窗口前后都允许 100% QPS) | 简单场景 |
| 漏桶 | 恒定速率出 | 不支持突发流量 | 严格匀速 |
| 令牌桶 | 允许突发(桶内累积令牌) | 参数多 | 主流(Guava RateLimiter) |
| 滑动窗口 | 精细统计 | 实现复杂 | 精细限流 |
- 单机限流:Guava RateLimiter、Resilience4j
- 集群限流:Redis + Lua、Sentinel 集群限流
正常放行,统计错误率
↓ 触发阈值(如 10s 内错误率>50%)
CLOSED ──────→ OPEN ──── 等待恢复期(如 10s)
↑ ↓
│ ↓ 放一半请求探测
│ ↓
└──── HALF-OPEN ←──┘
探测成功回 CLOSED / 失败回 OPEN
三种触发方式:- 慢调用比例:响应时间超阈值(如 500ms)的比例
- 错误比例:错误率(超时/异常/5xx)
- 错误数:固定窗口内的错误绝对数
- 熔断阈值:错误率 > 50%(或错误数 > 阈值)
- 统计窗口:10s
- 恢复期:10-30s
- 探测请求数:3-10 个
| 类型 | 说明 | 举例 |
|---|---|---|
| 服务降级 | 返回兜底值/错误提示 | 三方接口挂了返回随机推荐位 |
| 功能降级 | 隐藏非核心功能 | 推荐位挂了、评论区挂了 |
| 数据降级 | 返回缓存旧数据 | 库存查询挂了返回上次缓存 |
| 排队降级 | 同步转异步,进队列稍后处理 | 支付成功但积分/通知稍后处理 |
| 消息降级 | 同步转异步(用 MQ) | 下单主流程异步通知下游 |
| 策略 | 作用点 | 目的 |
|---|---|---|
| 限流 | 本服务入口 | 控制总流量,防被打爆 |
| 熔断 | 下游依赖 | 快速失败,防被拖垮 |
| 降级 | 本服务对外接口 | 兜底可用,防完全失败 |
入口请求 → [网关限流] → [调用下游] → 下游失败率超阈值
↓
[熔断打开,快速失败]
↓
[触发降级,返回兜底值]
主流工具对比:
| 工具 | 特点 | 状态 |
|---|---|---|
| Hystrix | Netflix 经典,线程池隔离,概念最清晰 | 已停止维护 |
| Sentinel | 阿里,信号量隔离(无线程切换),支持热点参数限流、系统自适应保护、熔断规则多样 | 当前主流 |
| Resilience4j | Java 8+ 模块化,轻量,Hystrix 替代 | 活跃 |
- 限流阈值 = 压测 80%(留 20% 余量)
- 熔断阈值 = 50% 错误率持续 10s
- 恢复期 = 10-30s
- 探测请求数 = 3-10 个(连续 N 次成功后回 CLOSED)
STEP 4 · 简化
口诀:限流=入口守门员,熔断=下游保险丝,降级=兜底策略;熔断三态机 CLOSED→OPEN→HALF-OPEN;三者组合:网关限流+服务熔断+熔断后降级。
常见误区
只说"熔断就是切断"
熔断是三态机,有 CLOSED/OPEN/HALF-OPEN 迁移过程
降级只说"返回随机值"
有 5 种类型(服务/功能/数据/排队/消息)
不提主流工具
Sentinel、Hystrix、Resilience4j 都要能说出区别
延伸追问
熔断三态具体怎么迁移?
要点:CLOSED(正常放行)→ 触发阈值(如 10s 内错误率>50%)→ OPEN(快速失败,不再调用)→ 等恢复期(如 10s)→ HALF-OPEN(放一半请求探测)→ 探测成功回 CLOSED / 失败回 OPEN。
Hystrix 熔断和 Sentinel 熔断有什么区别?
要点:Hystrix 用滑动时间窗口的孤立线程池隔离,Sentinel 用信号量隔离(无线程切换开销);Hystrix 已停止维护,Sentinel 是当前主流;Sentinel 支持热点参数限流、系统自适应保护等。
什么时候用限流而不是熔断?
要点:本服务流量过载用限流(入口保护);下游服务不稳定用熔断(依赖保护);两者互补。典型组合:网关限流 + 服务熔断 + 熔断后降级。
生产环境如何确定限流阈值和熔断阈值?
要点:压测(JMeter/AB)确定单机 QPS 上限,取 80% 作为限流阈值;熔断阈值参考 P95 错误率,一般 50% 持续 10s 触发;恢复期一般 10-30s;Sentinel 自适应规则可动态调整。
速查表
限流:入口控制(本服务),4 算法:计数器/漏桶/令牌桶/滑动窗口
熔断:下游保护,三态机:CLOSED→OPEN→HALF-OPEN
降级:兜底策略,5 类型:服务/功能/数据/排队/消息
组合:网关限流 + 服务熔断 + 熔断后降级
工具:Sentinel(主流)/ Hystrix(停维护)/ Resilience4j(Hystrix 替代)
阈值:限流=压测 80%;熔断=50% 错误率持续 10s;恢复期=10-30s
Anki 候选卡片
Q: 限流、熔断、降级三者的本质区别?
A: 限流=入口流量控制(本服务);熔断=下游依赖保护(快速失败);降级=兜底策略(返回非真实结果)——三者是独立策略,不是阶段
Q: 熔断三态机如何迁移?
A: CLOSED(正常)→ 触发阈值(如 10s 内错误率>50%)→ OPEN(快速失败)→ 等恢复期 → HALF-OPEN(放一半请求探测)→ 成功回 CLOSED/失败回 OPEN
Q: 4 种限流算法?
A: 计数器(简单但边界突发)/ 漏桶(恒定速率出)/ 令牌桶(允许突发,主流)/ 滑动窗口(精细统计)
Q: 5 种降级类型?
A: 服务降级(返回兜底值)/ 功能降级(隐藏非核心功能)/ 数据降级(返回缓存旧数据)/ 排队降级(进队列稍后处理)/ 消息降级(同步转异步)
Q: Hystrix vs Sentinel 区别?
A: Hystrix 线程池隔离、已停止维护;Sentinel 信号量隔离(无线程切换开销)、当前主流、支持热点参数限流和自适应保护
Q: 熔断三种触发方式?
A: 慢调用比例 / 错误比例 / 错误数
Q: 三者典型组合?
A: 网关限流 + 服务熔断 + 熔断后降级,形成三层保护
关联题目
关联知识
三者独立策略;熔断三态机;5 种降级类型;Sentinel vs Hystrix
✦ 记 忆 口 诀 ✦
限流入口 / 熔断下游 / 降级兜底 / 三态机 CLOSED-OPEN-HALF
关键可视化
暂无可视化
知识关系
⬆️ 前置(Prerequisite)
暂无🔄 延伸(Extends)
暂无⚡ 对比(Contrast)
暂无
🎯 概念
📏 规则
⚠️ 误区
🔍 追问
✨ 口诀
共 0 张卡,点击翻面