熔断、降级、限流分别解决什么问题?在整体架构中如何联动?

结论先行:三者都是保护机制,但对象不同:限流保护自己不被超过承载的流量压垮;熔断保护下游不被持续的错误请求打垮,也让调用方快速失败;降级是牺牲非核心功能保住核心链路。真实系统按“入口限流 → 依赖熔断 → 非核心降级”分层联动。

一、三者定位对比

手段保护对象触发依据典型动作
限流自身实例/集群QPS、并发数、配额拒绝 429、排队
熔断下游依赖错误率/慢调用超阈值快速失败、开闸试探
降级核心链路依赖异常、资源紧张返回兜底、关闭非核心功能

二、熔断状态机(以 Sentinel/Hystrix 为例)

Closed(正常)--错误率超阈值--> Open(熔断,直接快速失败)
Open --休眠窗口结束--> Half-Open(放少量试探流量)
Half-Open 成功 → Closed;Half-Open 失败 → 回到 Open
  • 关键参数:错误率阈值、最小调用量(防小流量误触发)、熔断窗口、试探流量大小。

三、限流算法对比

算法思路特点
固定窗口每秒计数归零简单,临界点可突发击穿
滑动窗口细粒度分桶统计平滑,实现稍重
漏桶恒定速率流出强制匀速,抗突发差
令牌桶按速率补令牌、可攒允许突发,最常用
网关层:按 IP/用户粗限流(Redis 分布式计数)
服务层:按接口/资源配额细限流(Sentinel 等)

四、降级的常见姿势

  • 超时降级:依赖超时就返回缓存值/默认值,不让用户无限等待。
  • 异常降级:捕获异常后给兜底结果并记录,异步补偿。
  • 功能降级:大促时关闭评论、推荐等非核心功能,把资源让给交易链路。

常见追问与记忆点

  • 追问:熔断与重试同时出现时谁先谁后?熔断开启时禁止重试,否则试探流量被放大;先熔断,恢复探测按退避节奏来。
  • 追问:降级与限流一句话区别?限流挡“进不来的人”,降级砍“没那么重要的功能”。
  • 记忆点:限流护自己、熔断护下游、降级护核心;三者联动才能扛住故障与峰值。
笔记加载中…