Spring Cloud Hystrix的引入

一 引入背景

由于微服务中的每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方对外服务也出现延迟,若此时调用方请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪。

二 举例

在一个电商网站中,可能会将系统拆分成用户、订单、库存、积分、评论等一系列服务单元。用户创建一个订单的时候,客户端将调用订单服务的创建订单接口,此时创建订单接口又会向库存服务来请求出货。此时,若库存服务自身处理逻辑等原因造成响应缓慢,会直接导致创建订单服务的线程被挂起,以等待库存申请服务的响应,在漫长的等待之后用户会因为请求库存失败而得到创建订单失败的结果。如果在高并发情况之下,因这些挂起的线程在等待库存服务的响应而未能释放,使得后续到来的创建订单的请求被阻塞,最终导致订单服务不可用。

三 问题说明

在微服务架构中,存在那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引起故障的蔓延,最终导致整个系统的瘫痪,这样的架构相比传统架构更加不稳定。为了解决这样的问题,产生了断路器等一系列的服务保护机制。

四 起源

断路器模式源于Matin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时切断故障电路,防止发生过载、发热甚至起火等严重后果。

五 作用

当某个服务单元发生故障,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务而被长时间占用不释放,避免了故障在分布式系统中的蔓延。

六 功能

Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。

它是基于Netfilx的开源框架Hystrix的实现,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/81346406