
什么是服务雪崩?
概念解释
服务雪崩是分布式系统中常见的故障现象,指一个服务的故障像滚雪球一样引发连锁反应,最终导致整个系统瘫痪。就像雪山上的一个小雪块滚落,最终引发大规模雪崩一样。
故事举例:电商王国的崩溃
假设有一个电商王国(分布式系统),包含四个核心服务:
- 用户服务(处理登录)
- 订单服务(创建订单)
- 库存服务(扣减库存)
- 支付服务(处理付款)
正常流程:
用户下单 → 订单服务调用库存服务 → 库存服务调用支付服务。
某天库存服务因数据库故障变慢(响应时间从50ms→5s):
- 订单服务调用库存服务时,大量线程被阻塞等待响应
- 订单服务的线程池耗尽,无法处理新请求
- 用户服务调用订单服务时全部超时失败
- 用户看到“系统繁忙”无法下单
- 支付服务因无新订单陷入闲置
最终结果:
一个服务的故障蔓延到整个系统,所有服务瘫痪——这就是服务雪崩。
根本原因分析
| 关键因素 | 说明 |
|---|---|
| 服务依赖 | 服务间存在调用链(A→B→C),形成故障传播路径 |
| 资源耗尽 | 故障服务占用调用者资源(如线程、连接池),导致调用者瘫痪 |
| 无熔断机制 | 系统持续向故障服务发送请求,加剧问题 |
| 重试风暴 | 客户端频繁重试失败请求,放大流量冲击 |
解决方案(防雪崩四板斧)
-
熔断器(Circuit Breaker)
- 像电路保险丝:当失败率超过阈值,直接切断调用
- 工具示例:Hystrix、Sentinel
// 伪代码示例 @CircuitBreaker(failureThreshold=50%, timeout=1000ms) public void callInventoryService() {...} -
服务降级(Fallback)
- 故障时提供保底方案:
- 返回缓存数据
- 返回默认值(如“服务繁忙,稍后重试”)
@Fallback(fallbackMethod="defaultStock") public int getStock() {...} - 故障时提供保底方案:
-
限流(Rate Limiting)
- 控制请求流量,防止资源耗尽:
- 令牌桶算法(Guava RateLimiter)
- 漏桶算法
RateLimiter limiter = RateLimiter.create(100); // 每秒100请求 if(limiter.tryAcquire()) {...} - 控制请求流量,防止资源耗尽:
-
服务隔离
- 线程池隔离:为每个服务分配独立线程池,避免资源竞争
- 信号量隔离:控制并发调用数量
总结
- 核心问题:局部故障通过服务依赖链扩散成全局故障
- 关键防御:
- 熔断:快速失败
- 降级:保障基本可用性
- 限流:保护系统资源
- 隔离:阻断故障传播
- 本质目标:将故障控制在最小范围,像防火隔离带阻止火势蔓延
📊 下图总结服务雪崩的核心逻辑:

443

被折叠的 条评论
为什么被折叠?



