Spring Cloud Hystrix原理介绍

在微服务架构中,通常会存在多个服务层调用的情况,如果基础服务出现故障可能会发生级联传递,导致整个服务链上的服务不可用,如图1所示。


Spring Cloud Hystrix原理介绍

图1 服务故障的级联传递

在图1中,A为服务提供者,B为A的服务调用者,C和D是B的服务调用者。随着时间的推移,当A的不可用引起B的不可用,并将不可用逐渐放大到C和D时,整个服务就崩溃了。

为了解决服务级联失败这种问题,在分布式架构中产生了断路器等一系列的服务保护机制。分布式架构中的断路器,有些类似于我们生活中的空气开关,当电路发生短路等情况时,空气开关会立刻断开电流,以防止用电火灾的发生。

在Spring Cloud中,Spring Cloud Hystrix就是用来实现断路器、线程隔离等服务保护功能的。Spring Cloud Hystrix是基于Netflix的开源框架Hystrix实现的,该框架的使用目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

与空气开关不能自动重新打开有所不同的是,断路器是可以实现弹性容错的,在一定条件下它能够自动打开和关闭,其使用时主要有三种状态,如图2所示。

在图2中,断路器的开关由关闭到打开的状态是通过当前服务健康状况(服务的健康状况=请求失败数/请求总数)和设定阈值(默认为10秒内的20次故障)比较决定的。当断路器开关关闭时,请求被允许通过断路器,如果当前健康状况高于设定阈值,开关继续保持关闭;如果当前健康状况低于设定阈值,开关则切换为打开状态。当断路器开关打开时,请求被禁止通过;如果设置了fallback方法,则会进入fallback的流程。当断路器开关处于打开状态,经过一段时间后,断路器会自动进入半开状态,这时断路器只允许一个请求通过;当该请求调用成功时,断路器恢复到关闭状态;若该请求失败,断路器继续保持打开状态,接下来的请求会被禁止通过。


Spring Cloud Hystrix原理介绍

图2 断路器的三种状态转换

Spring Cloud Hystrix能保证服务调用者在调用异常服务时快速地返回结果,避免大量的同步等待,这是通过HystrixCommand的fallback方法实现的,如图3所示。


Spring Cloud Hystrix原理介绍

图3 fallback方法

在图3中,虽然A服务仍然不可用,但采用fallback的方式可以给用户一个友好的提示结果,这样就避免了其他服务的崩溃问题。

猜你喜欢:

Spring MVC框架有哪些优点?

Spring AOP实现原理和常见代理的区别

Spring Cloud是什么?怎么理解Spring Cloud?

Spring Boot如何实现微服务?/a>

Spring框架功能分为哪些模块?

传智教育java培训课程

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253815.html

(0)
上一篇 2022年5月9日 00:53
下一篇 2022年5月9日 00:57

相关推荐

发表回复

登录后才能评论