这四个概念经常一起出现,但侧重点不一样。可以把它们理解成:
- 服务雪崩:故障现象
- 熔断:防止故障继续扩散
- 限流:防止系统被流量打垮
- 降级:在资源不足时,优先保证核心功能可用
1. 服务雪崩是什么
服务雪崩指的是:
分布式系统里某个服务出现故障后,导致大量请求堆积、线程耗尽、调用链层层阻塞,最终让更多服务也跟着不可用,故障像雪崩一样迅速扩大。
典型过程
比如一个电商系统调用链是:
用户下单 -> 订单服务 -> 库存服务 -> 支付服务
如果库存服务突然变慢或宕机:
- 订单服务调用库存服务一直超时等待
- 订单服务的线程池被占满
- 新请求进不来
- 用户请求继续堆积
- 上游网关、下游支付服务也被拖慢
- 最终整个系统大面积不可用
这就叫服务雪崩。
本质
本质上是:
- 服务之间强依赖
- 没有隔离
- 没有限流、熔断、降级等保护措施
- 一个点故障引发全链路故障
2. 熔断是什么
熔断是一种自我保护机制。
当某个下游服务异常率很高、响应很慢、频繁超时时,调用方会暂时停止继续调用这个服务,直接返回错误或兜底结果,避免自己也被拖死。
为什么叫熔断
和电路里的保险丝类似:
- 电流过大时,保险丝断开
- 防止整个电路烧掉
在系统里就是:
- 某个依赖服务已经不稳定了
- 那就先别继续请求它了
- 先“断开一段时间”
熔断的常见状态
- 关闭状态:正常调用
- 打开状态:检测到失败率过高,直接拒绝请求,不再调用下游
- 半开状态:过一段时间后,放少量请求去试探下游是否恢复
举例
订单服务调用优惠券服务:
- 如果优惠券服务连续超时
- 订单服务触发熔断
- 后续请求不再调用优惠券服务
- 直接提示“优惠券暂不可用”或走无优惠券流程
这样订单主流程还能继续。
熔断的核心作用
- 防止故障扩散
- 防止线程池、连接池被耗尽
- 给下游恢复时间
3. 限流是什么
限流就是限制单位时间内进入系统的请求数量,防止突发流量把系统压垮。
为什么要限流
系统处理能力是有限的,比如:
- 数据库每秒最多扛 5000 次查询
- 某服务线程池最多同时处理 2000 个请求
如果突然来了 10 万 QPS,不做限制,系统一定会被打挂。
所以要通过限流,把超出系统承受能力的请求拦住。
常见限流算法
1)固定窗口
例如:1 秒最多 1000 个请求。
实现简单,但可能出现临界点突刺问题。
2)滑动窗口
把统计更细化,限流更平滑。
3)令牌桶
系统按固定速率往桶里放令牌,请求拿到令牌才能通过。
适合处理突发流量。
4)漏桶
请求先进桶,再按固定速率流出。
适合强制匀速处理请求。
举例
秒杀场景中:
- 商品详情页每秒允许 2 万请求
- 下单接口每秒只允许 1000 请求
超过部分:
- 排队
- 返回“请求过于频繁,请稍后再试”
限流的核心作用
- 保护系统不被打垮
- 防止资源被瞬间耗尽
- 保证核心服务在高压下仍可用
4. 降级是什么
降级就是当系统压力过大、资源不足、依赖异常时,主动关闭一些非核心功能,或者返回简化结果,优先保证核心链路可用。
降级和熔断的区别
- 熔断:主要针对某个故障依赖,先不调用它
- 降级:站在整体系统视角,牺牲次要功能,保核心功能
常见降级方式
1)功能降级
关闭非核心功能,比如:
- 评论不展示
- 推荐暂停
- 优惠券暂不可用
2)结果降级
返回默认值、缓存值、静态数据,比如:
- 个性化推荐失败,返回热门商品
- 用户画像服务不可用,返回默认配置
3)页面降级
复杂页面切换成简化版页面
4)读写降级
只读、不允许修改,或者延迟写入
举例
双十一期间:
- 首页推荐服务压力太大
- 系统自动降级成“热门商品推荐”
- 购物车、下单、支付这些核心流程继续可用
用户体验会差一点,但系统不会崩。
降级的核心作用
- 保核心业务
- 牺牲部分体验换整体稳定
- 提高高峰期的存活能力
5. 这四者之间的关系
服务雪崩
是坏结果。
熔断、限流、降级
都是为了防止雪崩的保护手段。
它们可以一起配合:
- 限流:先控制流量,别让太多请求进来
- 熔断:发现下游有问题,先别调了
- 降级:非核心功能先关掉,保住主链路
- 最终目标:避免服务雪崩
6. 一个完整例子帮你理解
假设有一个基金交易系统:
用户申购 -> 交易服务 -> 账户服务 -> 风控服务 -> 清算服务 -> 消息通知
如果某天流量暴涨,风控服务响应很慢。
没有保护措施
- 交易服务大量线程阻塞在风控调用上
- 请求堆积
- 数据库连接耗尽
- 账户服务、清算服务也被拖慢
- 最终整个交易系统崩掉
这就是服务雪崩
有保护措施时
限流
网关先限制申购请求速率,超过阈值直接拒绝部分请求
熔断
发现风控服务错误率过高,交易服务暂时不再继续调用风控服务
降级
某些非核心校验先关闭,只保留基础校验;消息通知异步发送失败也不影响主流程
这样即使部分功能受影响,主交易链路仍然可用。
7. 面试回答
服务雪崩是指一个服务故障后,由于调用链依赖、线程阻塞、请求堆积,导致故障逐步扩散,最终引发整个系统大面积不可用。
熔断是当下游服务异常或超时过多时,调用方暂时停止调用下游,防止自己被拖垮。
限流是限制单位时间内的请求量,防止突发流量超过系统承载能力。
降级是在系统压力过大或依赖异常时,关闭非核心功能或返回兜底结果,优先保证核心业务可用。
它们本质上都是分布式系统中的保护机制,目标都是防止服务雪崩。
8. 它们的区别
一句话区分:
- 雪崩:已经出事了
- 熔断:坏的服务先别调了
- 限流:来的请求太多,先拦一部分
- 降级:不重要的功能先关掉