0
点赞
收藏
分享

微信扫一扫

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控


前言:本文的 Hystrix 断路器主要技术内容学习自教程视频:https://www.bilibili.com/video/BV1jJ411S7xr?p=13,此教程非常通俗易懂且有质量,也希望更多人能够支持这样高质量的UP,我在学习时收获很多,因视频形式不易复习回顾,因此加了一部分自己的见解并整理成图文博客的形式。

文章目录

  • ​​1 Hystrix 概述​​
  • ​​1.1 分布式系统面临的问题​​
  • ​​1.2 服务雪崩​​
  • ​​1.3 什么是 Hystrix​​
  • ​​1.4 Hystrix 的应用​​
  • ​​2 Hystrix 服务熔断(在服务端实现!)​​
  • ​​2.1 是什么​​
  • ​​2.2 项目实战​​
  • ​​3 Hystrix 服务降级(在客户端实现!)​​
  • ​​3.1 是什么​​
  • ​​3.2 项目实战​​
  • ​​4 对比:服务熔断,服务降级​​
  • ​​5 Hystrix Dashboard 服务监控​​
  • ​​5.1 是什么​​
  • ​​5.2 项目实战​​

1 Hystrix 概述

1.1 分布式系统面临的问题

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide

1.2 服务雪崩

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_分布式_02

1.3 什么是 Hystrix

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_03

1.4 Hystrix 的应用

  • 服务降级
  • 服务熔断
  • 服务限流
  • 接近实时的监控

2 Hystrix 服务熔断(在服务端实现!)

2.1 是什么

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_04

2.2 项目实战

注:本系列文章的项目部分是前后关联的,多数项目是从前面写过来的,因此也可去参考之前的【Spring Cloud】文章

1、参考之前的服务提供者模块 springcloud-provider-dept-8001

  • 新建springcloud-provider-dept-hystrix-8001
  • 将之前8001的所有东西拷贝一份

2、修改pom,添加Hystrix的依赖

<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>

3、修改yml,修改eureka实例的id

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_05


4、修改DeptController

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_分布式_06


5、修改主启动类,添加新注解 @EnableCircuitBreaker,修改名称为 DeptProviderHystrix8001

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_07


6、测试:

  • 启动Eureka集群,启动此服务提供者的主启动类 DeptProviderHystrix8001(含 Hystrix 服务熔断机制)进行测试。
    -————可见,当访问不存在数据库中的 id 时,不会报错崩溃,具有很好的健壮性。
  • 【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_08

  • 之后启动原本的服务提供者模块 springcloud-provider-dept-8001(不含熔断机制) 进行对比测试。
    -————将会报 500 错误,如果后续的微服务模块也要用到这个结果的话,那么像这种情况,也会导致后续的微服务模块出现雪崩式的问题。
  • 【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_09

3 Hystrix 服务降级(在客户端实现!)

3.1 是什么

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_10


另外,服务降级处理是在客户端实现完成的,与服务端没有关系

3.2 项目实战

1、修改 springcloud-api 工程,根据已经有的 DeptClientService 接口新建一个实现了 FallbackFactory 接口的类 DeptClientServiceFallbackFactory

【注意:这个类上需要@Component注解!!!,方法无特殊情况不要返回 null,下图中的 queryAll() 返回返回 null 是不正确的!】

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring cloud_11


2、修改 springcloud-api 工程,DeptClientService 接口在注解 @FeignClient 中添加 fallbackFactory 属性值

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_分布式_12


3、springcloud-consumer-dept-feign-80 工程修改 yml

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_13

4、测试

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_14

4 对比:服务熔断,服务降级

服务熔断:​​在服务端实现​​​,一般是​​某个服务故障或者异常引起​​,类似现实世界中的 “保险丝” , 当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时。

服务降级:​​在客户端实现​​​,所谓降级,一般是​​从整体负荷考虑​​,就是当某个服务熔断之后,服务器将不再被调用,此时客户端自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

5 Hystrix Dashboard 服务监控

5.1 是什么

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring cloud_15


对应 Spring Cloud 官网的一张图:

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_16

5.2 项目实战

1、新建工程 springcloud-consumer-hystrix-dashboard-9001,内容是复制之前服务消费者 80 模块,并此新模块的 pom 文件中新增以下依赖:

<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>

2、application.yaml配置

server: 
port: 9001

3、主启动类改名 + 新注解@EnableHystrixDashboard

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_17


4、为了让所有的Provider微服务提供模块(8001/8002/8003) 也都能被监控,因此(1)也都需要配置监控依赖

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_18


(2)都要注入一个 Servlet Bean

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_分布式_19

5、测试,启动springcloud-consumer-hystrix-dashboard-9001该微服务监控消费端

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_20


启动 springcloud-provider-dept-hystrix-8001访问 http://localhost:8001/dept/get/1

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_21

http://localhost:8001/actuator/hystrix.stream 【查看1秒一动的数据流】

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring cloud_22


我们在监控页面的主页输入这两个参数信息后,就可以来到详细监控页面

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_23


详细监控页面的信息会随着服务消费者模块的请求而动态变化,

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring cloud_24


如何分析监控页面

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_java_25


【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_26


【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_spring_27


【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_分布式_28


更复杂的情况:

【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控_ide_29


举报

相关推荐

0 条评论