服务雪崩、熔断、限流、降级分别是什么?

4 阅读6分钟

这四个概念经常一起出现,但侧重点不一样。可以把它们理解成:

  • 服务雪崩:故障现象
  • 熔断:防止故障继续扩散
  • 限流:防止系统被流量打垮
  • 降级:在资源不足时,优先保证核心功能可用

1. 服务雪崩是什么

服务雪崩指的是:
分布式系统里某个服务出现故障后,导致大量请求堆积、线程耗尽、调用链层层阻塞,最终让更多服务也跟着不可用,故障像雪崩一样迅速扩大。

典型过程

比如一个电商系统调用链是:

用户下单 -> 订单服务 -> 库存服务 -> 支付服务

如果库存服务突然变慢或宕机:

  • 订单服务调用库存服务一直超时等待
  • 订单服务的线程池被占满
  • 新请求进不来
  • 用户请求继续堆积
  • 上游网关、下游支付服务也被拖慢
  • 最终整个系统大面积不可用

这就叫服务雪崩

本质

本质上是:

  • 服务之间强依赖
  • 没有隔离
  • 没有限流、熔断、降级等保护措施
  • 一个点故障引发全链路故障

2. 熔断是什么

熔断是一种自我保护机制。
当某个下游服务异常率很高、响应很慢、频繁超时时,调用方会暂时停止继续调用这个服务,直接返回错误或兜底结果,避免自己也被拖死。

为什么叫熔断

和电路里的保险丝类似:

  • 电流过大时,保险丝断开
  • 防止整个电路烧掉

在系统里就是:

  • 某个依赖服务已经不稳定了
  • 那就先别继续请求它了
  • 先“断开一段时间”

熔断的常见状态

  1. 关闭状态:正常调用
  2. 打开状态:检测到失败率过高,直接拒绝请求,不再调用下游
  3. 半开状态:过一段时间后,放少量请求去试探下游是否恢复

举例

订单服务调用优惠券服务:

  • 如果优惠券服务连续超时
  • 订单服务触发熔断
  • 后续请求不再调用优惠券服务
  • 直接提示“优惠券暂不可用”或走无优惠券流程

这样订单主流程还能继续。

熔断的核心作用

  • 防止故障扩散
  • 防止线程池、连接池被耗尽
  • 给下游恢复时间

3. 限流是什么

限流就是限制单位时间内进入系统的请求数量,防止突发流量把系统压垮。

为什么要限流

系统处理能力是有限的,比如:

  • 数据库每秒最多扛 5000 次查询
  • 某服务线程池最多同时处理 2000 个请求

如果突然来了 10 万 QPS,不做限制,系统一定会被打挂。
所以要通过限流,把超出系统承受能力的请求拦住。

常见限流算法

1)固定窗口

例如:1 秒最多 1000 个请求。
实现简单,但可能出现临界点突刺问题。

2)滑动窗口

把统计更细化,限流更平滑。

3)令牌桶

系统按固定速率往桶里放令牌,请求拿到令牌才能通过。
适合处理突发流量。

4)漏桶

请求先进桶,再按固定速率流出。
适合强制匀速处理请求。

举例

秒杀场景中:

  • 商品详情页每秒允许 2 万请求
  • 下单接口每秒只允许 1000 请求

超过部分:

  • 排队
  • 返回“请求过于频繁,请稍后再试”

限流的核心作用

  • 保护系统不被打垮
  • 防止资源被瞬间耗尽
  • 保证核心服务在高压下仍可用

4. 降级是什么

降级就是当系统压力过大、资源不足、依赖异常时,主动关闭一些非核心功能,或者返回简化结果,优先保证核心链路可用。

降级和熔断的区别

  • 熔断:主要针对某个故障依赖,先不调用它
  • 降级:站在整体系统视角,牺牲次要功能,保核心功能

常见降级方式

1)功能降级

关闭非核心功能,比如:

  • 评论不展示
  • 推荐暂停
  • 优惠券暂不可用

2)结果降级

返回默认值、缓存值、静态数据,比如:

  • 个性化推荐失败,返回热门商品
  • 用户画像服务不可用,返回默认配置

3)页面降级

复杂页面切换成简化版页面

4)读写降级

只读、不允许修改,或者延迟写入

举例

双十一期间:

  • 首页推荐服务压力太大
  • 系统自动降级成“热门商品推荐”
  • 购物车、下单、支付这些核心流程继续可用

用户体验会差一点,但系统不会崩。

降级的核心作用

  • 保核心业务
  • 牺牲部分体验换整体稳定
  • 提高高峰期的存活能力

5. 这四者之间的关系

服务雪崩

坏结果

熔断、限流、降级

都是为了防止雪崩的保护手段。

它们可以一起配合:

  • 限流:先控制流量,别让太多请求进来
  • 熔断:发现下游有问题,先别调了
  • 降级:非核心功能先关掉,保住主链路
  • 最终目标:避免服务雪崩

6. 一个完整例子帮你理解

假设有一个基金交易系统:

用户申购 -> 交易服务 -> 账户服务 -> 风控服务 -> 清算服务 -> 消息通知

如果某天流量暴涨,风控服务响应很慢。

没有保护措施

  • 交易服务大量线程阻塞在风控调用上
  • 请求堆积
  • 数据库连接耗尽
  • 账户服务、清算服务也被拖慢
  • 最终整个交易系统崩掉
    这就是服务雪崩

有保护措施时

限流

网关先限制申购请求速率,超过阈值直接拒绝部分请求

熔断

发现风控服务错误率过高,交易服务暂时不再继续调用风控服务

降级

某些非核心校验先关闭,只保留基础校验;消息通知异步发送失败也不影响主流程

这样即使部分功能受影响,主交易链路仍然可用。


7. 面试回答

服务雪崩是指一个服务故障后,由于调用链依赖、线程阻塞、请求堆积,导致故障逐步扩散,最终引发整个系统大面积不可用。
熔断是当下游服务异常或超时过多时,调用方暂时停止调用下游,防止自己被拖垮。
限流是限制单位时间内的请求量,防止突发流量超过系统承载能力。
降级是在系统压力过大或依赖异常时,关闭非核心功能或返回兜底结果,优先保证核心业务可用。
它们本质上都是分布式系统中的保护机制,目标都是防止服务雪崩。


8. 它们的区别

一句话区分:

  • 雪崩:已经出事了
  • 熔断:坏的服务先别调了
  • 限流:来的请求太多,先拦一部分
  • 降级:不重要的功能先关掉