Spring Cloud的熔断器Hystrix

什么是Hystrix?

在分布式系统中,服务与服务之间的依赖错综复杂,一种不可避免的情况是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞。Hystrix是Netflix公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中出现的联动故障。Hystrix是通过隔离服务的访问点阻止联动故障的,并提供故障的解决方案,从而提高了整个分布式系统的弹性。

Hystrix解决了什么问题?

在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,导致某个服务不可用。如果系统不隔离该不可用的服务,可能导致整个系统不可用,也是为了防止雪崩效应。

Hystrix设计原则

总的设计原则:

1、为了防止单个服务的故障耗尽整个服务的Servlet容器(如tomcat)的线程资源。

2、快速失败机制,如果某个服务出现故障,则调用该服务的请求快速失败,而不是线程等待。

3、提供快速回退fallback方案,在请求发生故障时,提供设定好的回退方案。

4、使用熔断机制,防止故障扩散到其他服务。

5、提供熔断器的监控组件Hystrix Dashboard,可以实时监控熔断器的状态。

Hystrix的工作机制

首先,当服务的某个api接口的失败次数在一定时间内小于设定的阈值时,熔断器处于关闭状态,该api接口正常提供服务。当该API接口处理请求的失败次数大于设定的阈值时,Hystrix判定该api接口出现故障,打开熔断器,这时请求该api接口会执行快速失败的逻辑即Fallback回退逻辑,不执行业务逻辑,请求的线程不会处于阻塞状态。处于打开状态的熔断器,一段时间后会处于半打开状态,并将一定数量的请求执行正常逻辑。剩下的请求会执行快速失败,若执行正常逻辑的请求失败了,则熔断器继续打开,若成功了,则熔断器关闭,这样熔断器就有了自我修复的功能。

这里介绍两种使用熔断器的实例

1、在RestTemplate和Ribbon上使用熔断器

maven引入hystrix依赖

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

如果这里http://service-one/getUser的服务不可用,那么将会执行反馈方法hiError,进而调用service-hi/login服务。当然如果我们不想让它继续访问service-hi/login服务,也可以直接返回字符串或者失败状态码给客户端。

2、在Feign上的使用熔断器Hystrix Dashboard

同样引入maven依赖

application.yml

Application启动类

service

controller

访问http://localhost:8765/hystrix.stream,浏览器会显示熔断器的数据指标。

访问http://localhost:8765/hystrix,显示Hystrix Dashboard主页。

猜你喜欢

转载自blog.csdn.net/u012373281/article/details/86523455
今日推荐