玩转Spring Cloud之熔断降级(Hystrix)与监控

为了防止服务消费链(多级服务之间的调用)上因某个服务出现故障,而导致级联故障,进而造成整个系统不可用(简称为:雪崩效应),推出了熔断降级的处理方式:Hystrix断路器(类似生活中电路保险丝)来解决这些潜在问题。

熔断降级是两个概念,网上也有很多相关的说明,我这里简单通俗说明一下:

熔断:当服务消费链上,下游服务因访问压力过大而出现响应变慢或失败不可用,上游服务为了保护系统整体的可用性(避免无效重试及长时等待等情况),可以暂时切断对下游服务的调用,直接快速返回错误的响应信息,当检测到该下游服务节点调用响应正常后再恢复消费链路。这个过程可以通过如下图形象说明:(图片来自,文中也有说明)

玩转Spring Cloud之熔断降级(Hystrix)与监控

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

熔断开启状态(Open):在固定时间窗口内(Hystrix默认是10秒),接口调用出错比率达到一个阈值(Hystrix默认为50%),会进入熔断开启状态。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法。

半熔断(半开启)状态(Half-Open):在进入熔断开启状态一段时间之后(Hystrix默认是5秒),熔断器会进入半熔断状态。所谓半熔断就是尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断关闭状态。

降级:降低服务标准以满足核心重要服务正常运转,详情的说明请参见:https://blog.51cto.com/8132260/2133705

Hystrix是什么,具体工作原理请参见:Netflix Hystrix断路器简介与工作原理

Tips:我们在项目中经常需要添加很多的maven依赖,依赖组件(或称类库)的名字可能各不相同,我们可以通过如下方式查询相关的maven依赖包及其依赖包本身的内部依赖详情

通过官网:,或者:https://search.maven.org/

一、搭建服务消费者项目,并集成 Hystrix环境

  请参见上篇《玩转Spring Cloud之服务注册发现(eureka)及负载均衡消费(ribbon、feign)》搭建注册中心,服务提供者,服务消费者,本文仍然使用上篇文章中所创建的服务消费者demo项目:eurekaclientconsumer

  1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-hystrix),配置如下:

<!-- 这里dependencyManagement附带贴出来,目的是说明如果不输version,想实现依赖继承,就需要这个,如果PMO中已经有则可不必再重复添加--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszjf.html