文章目录
- 熔断
- 概念
- 为什么需要熔断
- 熔断器模型
- 熔断策略
- 降级
- 概念
- 熔断和降级的关系
- 熔断降级
- 限时降级
- 限流降级
- 参考文章
熔断和降级都是自我保护的一种机制,但二者又有所不同。
熔断
概念
“熔断”一词早期来自股票市场。熔断[Circuit Breaker]也叫自动停盘机制,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。
熔断在程序中,表示断开的意思。如发生了某事件,程序为了整体的稳定性,所以暂时(断开)停止服务一段时间,以保证程序可用时再被使用。
熔断与保险丝的工作机制一样,比如保险丝能承受的最大电流是5A,如果电流达到了6A,由于保险丝承受不了这么高的电流,保险丝就会融化电路断开,起到了保护电路的作用。
为什么需要熔断
当下游服务因为某种原因突然变得不可用或者响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。目标服务情况好转则恢复调用。
微服务集群中,每个应用基本都会依赖一定数量的外部服务。有可能随时都会遇到网络连接缓慢,超时,依赖服务过载,服务不可用的情况,在高并发场景下如果此时调用方不做任何处理,继续持续请求故障服务的话很容易引起整个微服务集群雪崩 。比如高并发场景的用户订单,一般需要依赖:商品服务,账户服务,库存服务;
假如此时账户服务过载,订单服务持续请求账户服务只能被动的等待账户服务报错或者请求超时,进而导致订单请求被大量堆积,这些无效请求依然会占用系统资源:cpu,内存,数据库连接…导致订单服务整体不可用。即使账户服务恢复了订单服务也无法自我恢复。
如果此时有一个主动保护机制应对这种场景,至少可以保证自身的运行状态,等待账户服务恢复时订单服务也同步自我恢复,这种自我保护机制就是熔断[在订单服务处进行熔断等待账户服务的恢复]
熔断是调用方自我保护的机制,客观上也能保护被调用方
熔断器模型
熔断器分为三种状态:
-
Closed:初始状态,该状态下熔断器会保持闭合,对资源的访问通过熔断器的检查。
-
Open:断开状态,熔断器开启,对资源的访问进行切断
-
Half Open:半开状态,该状态下除了探测流量,对资源的访问也会被切断。探测流量是指,熔断器处于半开状态时,会周期性的允许一定数目的探测请求通过,如果探测请求能够正常返回,代表探测成功,此时熔断器会重置状态到Closed状态,结束熔断;如果探测失败,回滚到Open状态。
三种状态之间的转换 -
初始状态下,熔断器处于Closed状态。如果基于熔断器的统计数据表明当前资源触发了设定的阈值,那么熔断器会切换状态到Open状态
-
Open状态即熔断状态,所有请求都直接会被拒绝。熔断规则中会配置一个熔断超时重试时间,经过熔断超时重试时长后熔断器被置为Half-Open状态,从而进行探测机制
-
处于HalfOpen状态;进行周期性探测,请求服务正常变为Closed状态,请求服务不成功变为Open状态。
熔断策略
- 慢调用比例策略(Slow Request Ration):在Closed状态下,当响应慢的请求[需要设置适当的RT临界值]到达一定的比例触发阈值,就会熔断变为Open状态。
- 错误比例策略(Error Ratio):在Closed状态,统计周期内资源请求访问异常比例大于设定的阈值,就会熔断变为Open状态,拒绝接下来的服务请求。
- 错误计数策略(Error Count):在Closed状态,在资源周期内请求异常访问数达到阈值,触发熔断变为Open状态。
降级
概念
降级(fallback),降低级别的意思,指在程序出现问题时,仍能保证有限功能可用的一种机制。
比如电商交易系统在双11时,使用的人比较多,此时如果开放所有功能,可能会导致系统不可用,此时可以开启降级功能,优先保证支付功能可用,而其它非核心功能,如评论、物流、商品介绍等功能暂时关闭。
降级是一个退而求其次的方案,熔断是整体不可用的方案。
熔断和降级的关系
降级和熔断是服务安全中的2个不同的流程,在服务发生故障时,先断开[熔断]与服务的连接,然后在执行降级逻辑。
熔断时会调用降级机制,降级时不会调用熔断机制;
熔断是从全局出发,为了保证系统稳定性而停用服务,降级是退而求其次,提供一种保底的解决方案。
降级是一种思想,一个接口,熔断降级限流的关系如下:
熔断降级
A服务调用B服务,失败次数达到一定阈值后,A服务的断路器打开,就不再请求B服务,直接执行本地的fallback方法;
限时降级
A服务调用B服务,B服务响应超过A服务设定的阈值,执行降级逻辑
限流降级
服务B的连接超过自身能承受的最大连接数。
具体如何限流可以详见文章https://blog.csdn.net/weixin_46290302/article/details/135054106?spm=1001.2014.3001.5501
参考文章
1.https://blog.csdn.net/abu935009066/article/details/128134965
2.熔断和降级的区别
3.一文讲透微服务熔断的原理
4.微服务熔断和降级的区别