更新时间:2021-03-25 来源:黑马程序员 浏览量:
在微服务架构中,通常会存在多个服务层调用的情况,如果基础服务出现故障可能会发生级联传递,导致整个服务链上的服务不可用,如图1所示。
图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的流程。当断路器开关处于打开状态,经过一段时间后,断路器会自动进入半开状态,这时断路器只允许一个请求通过;当该请求调用成功时,断路器恢复到关闭状态;若该请求失败,断路器继续保持打开状态,接下来的请求会被禁止通过。
图2 断路器的三种状态转换
Spring Cloud Hystrix能保证服务调用者在调用异常服务时快速地返回结果,避免大量的同步等待,这是通过HystrixCommand的fallback方法实现的,如图3所示。
图3 fallback方法
在图3中,虽然A服务仍然不可用,但采用fallback的方式可以给用户一个友好的提示结果,这样就避免了其他服务的崩溃问题。
猜你喜欢:
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19