限流降级熔断场景
2021年618大促,某电商平台的商品详情页接口突然全面崩溃,所有用户都无法访问商品。
技术团队排查后发现:商品详情页依赖了促销服务,大促期间促销服务响应缓慢。本来应该限流保护促销服务,但限流配置写错了——限流阈值设成了1次/秒,导致正常请求也被限流了。
更糟糕的是:没有熔断机制,大促流量全部打到促销服务,导致促销服务崩溃,进而拖垮了商品详情页服务。
这次故障持续了15分钟,影响了大促GMV约500万元。
【面试官手记】
限流降级熔断是保障系统稳定性的三板斧。我面试过的候选人里,能说清楚"限流算法"的不超过30%,能说清楚"熔断器模式"的不超过20%。三者的关键是理解保护的是谁。
一、限流、降级、熔断的区别 🔴
1.1 三个概念
1.2 三者关系
1.3 面试追问
面试官:限流、降级、熔断分别是什么?
候选人:三个概念:
限流是保护系统不被过载,超出阈值的请求直接拒绝。
降级是关闭非核心功能,返回兜底数据,保证核心功能可用。
熔断是当下游服务故障时,快速失败不再调用,防止故障扩散。
【面试官心理】
三者的追问通常很深入。能说出三者区别的候选人,说明理解基本概念;能说出实现算法的候选人,说明有实践能力。
二、限流算法 🔴
2.1 计数器算法
2.2 滑动窗口算法
2.3 令牌桶算法
2.4 漏桶算法
三、熔断器 🟡
3.1 熔断器三状态
3.2 Sentinel实现
3.3 Sentinel注解
四、降级策略 🟡
4.1 降级开关
4.2 降级配置
4.3 降级返回
五、生产避坑 🟡
5.1 限流降级熔断的五大坑
坑1:限流阈值设错了
坑2:没有熔断导致故障扩散
坑3:降级数据太假
坑4:只保护自己不保护下游
坑5:熔断后没有恢复
5.2 配置参考
六、真实面试回放 🟡
面试官:Sentinel和Hystrix的区别是什么?
候选人(小张):三个区别:
一是线程隔离。Hystrix用线程池隔离,会消耗线程资源;Sentinel用信号量隔离,性能更好。
二是熔断策略。Hystrix只支持失败率熔断;Sentinel支持失败率、RT、异常数三种。
三是限流。Hystrix不支持限流;Sentinel原生支持限流。
面试官:令牌桶和漏桶的区别是什么?
小张:两个区别:
一是流量形状。令牌桶支持突发流量,突发时拿积累的令牌;漏桶不支持突发,流量始终平滑。
二是适用场景。令牌桶适合需要处理突发流量的场景;漏桶适合需要流量绝对平滑的场景。
面试官:熔断器怎么设计?
小张:三个状态:
Closed状态下正常调用,统计失败率。
失败率超阈值后进入Open状态,快速失败。
熔断时间到了进入HalfOpen状态,放行部分请求试探。
试探成功回到Closed,失败回到Open。
【面试官手记】
小张这场面试的亮点:
知道Sentinel和Hystrix的区别
知道令牌桶和漏桶的区别
知道熔断器三状态的设计
限流降级熔断是P6工程师必备技能,能完整回答的候选人,说明有高可用设计能力。
限流降级熔断的核心是保护系统稳定性。记住三个要点:
- 限流:保护自己,用令牌桶/滑动窗口
- 熔断:保护不被下游拖垮,用Sentinel
- 降级:保证核心功能,用降级开关
三板斧配合使用,才能保障系统稳定。