服务熔断详解(作用及实现原理图解)

服务熔断详解(作用及实现原理图解)-mikechen

什么是服务熔断

熔断其实可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。

同样这个场景被应用到了互联网系统中,比如:当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用,这就是服务熔断。

 

为什么需要服务熔断

1.服务正常时候

我们来看一个例子,这样就更容易理解服务熔断的机制了。

比如:当前系统中有A B C三个服务,服务A是上游,服务B是中游,服务C是下游。

它们的调用链,如下图所示:

服务熔断详解(作用及实现原理图解)-mikechen

2.服务异常的时候

服务正常的时候一切都还好,但是如果遇到突发情况,服务C因某些原因变得不可用。

这样就会造成大量请求被积压,服务B的请求线程也随之阻塞,线程资源逐渐耗尽,使得服务B也变得不可用,紧接着服务A也变为不可用,整个调用链路被拖垮。

最后就会出现雪崩的场景,如下图所示:

服务熔断详解(作用及实现原理图解)-mikechen

在这种时候,就需要我们的熔断机制来挽救整个系统。

 

服务熔断机制原理

服务熔断的实现,大体流程如下图所示:

服务熔断详解(作用及实现原理图解)-mikechen

对于熔断机制的实现,设计了三种状态:

1.熔断关闭状态(Closed)

服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。

2.熔断开启状态(Open)

在固定时间窗口内,比如:默认10秒,接口调用出错比率达到一个阈值,会进入熔断开启状态,进入熔断状态后,后续对该服务接口的调用不再经过网络。

3.半熔断状态(Half-Open)

在进入熔断开启状态一段时间之后,比如:Hystrix默认5秒,熔断器会进入半熔断状态。

所谓半熔断就是尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率,如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态。

如果成功率仍旧很低,则重新进入熔断关闭状态。

服务熔断组件

目前使用服务熔断组件,主要有以下4种:

  • hystrix circuit breaker(不再维护);
  • hystrix-go;
  • resilience4j(推荐);
  • sentinel(推荐);

目前主流推荐使用Sentinel来实现服务熔断,如果想更加全面的了解Sentinel,请查看Sentinel(从入门到精通详细图解)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法