spring boot集成Hystrix

spring boot集成Hystrix

  • 1. 什么是Hystrix
  • 2. Hystrix解决了什么问题
  • 3. Hystrix设计原则
  • 4. Hystrix工作机制
  • 5. RestTemplate和Ribbon使用Hystrix
    • 5.1 创建项目
    • 5.2 配置
    • 5.3 添加注解
    • 5.4 创建Ribbon配置
    • 5.5 创建Ribbon Service
    • 5.6 创建controller
    • 5.7 验证
  • 6. 在Feign上使用熔断器
    • 6.1 创建项目
    • 6.2 配置
    • 6.3 添加注解
    • 6.4 feign配置
    • 6.5 feign调用
    • 6.6 feign的hystrix处理
    • 6.7 service
    • 6.8 controller
    • 6.9 验证
  • 7. RestTemplate和Feign对比
  • 8. Hystrix Dashboard & RestTemplate
    • 8.1 创建
    • 8.2 配置
    • 8.3 配置hystrix dashboard
    • 8.4 配置ribbon
    • 8.5 service
    • 8.6 controller
    • 8.7 注解
    • 8.8 启动
  • 9. Hystrix Dashboard & Feign
    • 9.1 创建
    • 9.2 配置
    • 9.3 配置hystrix dashboard
    • 9.4 配置feign
    • 9.5 dao.feign
    • 9.6 hystrix.feign
    • 9.7 service
    • 9.8 controller
    • 9.9 注解
    • 9.10 启动
  • 10. Turbine聚合监控
    • 10.1 创建
    • 10.2 配置
    • 10.3 启动

git地址
https://github.com/a18792721831/studySpringCloud.git

1. 什么是Hystrix

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

2. Hystrix解决了什么问题

在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,例如机房的不可靠性、网络服务商的不可靠性等,导致某个服务不可用。如果系统不隔离该不可用的服务,可能会导致整个系统不可用。
在高并发的情况下,单个服务的延迟会导致整个请求都处于延迟状态,可能在几秒钟就使整个服务处于线程负载饱和的状态。
某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果就是整个服务的线程资源消耗殆尽。由于服务的依赖性,会导致依赖于该故障服务的其他服务也处于线程阻塞状态,最终导致这些服务的线程资源消耗殆尽,直到不可用,从而导致整个问服务系统都不可用,即雪崩效应。
为了防止雪崩效应,因而产生了熔断器模型。Hystrix 是在业界表现非常好的一个熔断器模型实现的开源组件,它是Spring Cloud 组件不可缺少的一部分。

3. Hystrix设计原则

总的来说,Hystrix的设计原则如下。

  • 防止单个服务的故障耗尽整个服务的Servlet容器(例如Tomcat)的线程资源。
  • 快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待。
  • 提供回退(fallback)方案,在请求发生故障时,提供设定好的回退方案。
  • 使用熔断机制,防止故障扩散到其他服务。
  • 提供熔断器的监控组件Hystrix Dashboard,可以实时监控熔断器的状态。

4. Hystrix工作机制

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

5. RestTemplate和Ribbon使用Hystrix

5.1 创建项目

spring boot集成Hystrix_第1张图片

5.2 配置

配置服务名称,eureka server,日志等
spring boot集成Hystrix_第2张图片
配置eureka client服务提供者的连接名称
spring boot集成Hystrix_第3张图片

5.3 添加注解

spring boot集成Hystrix_第4张图片

5.4 创建Ribbon配置

spring boot集成Hystrix_第5张图片

5.5 创建Ribbon Service

spring boot集成Hystrix_第6张图片
当Hystrix认为eureka client的服务提供者提供的服务不可用时,就会访问fallbackMethod的方法

5.6 创建controller

spring boot集成Hystrix_第7张图片

5.7 验证

首先启动eureka server
spring boot集成Hystrix_第8张图片
然后启动本项目
spring boot集成Hystrix_第9张图片
注意,此时没有启动eureka client服务提供者,那么服务是不可用的。
访问Hystrix的接口,会调用service里面的fallbackMethod的方法。
spring boot集成Hystrix_第10张图片
接下来启动eureka client 服务提供者。
spring boot集成Hystrix_第11张图片
此时服务可达,所以,此时应该能够正确的访问的
spring boot集成Hystrix_第12张图片
当然,需要多试试,才能成功。
spring boot集成Hystrix_第13张图片
这就是Hystrix的自我修复。
将熔断器设置为半开状态,尝试请求,成功就将服务设置可用,否则继续熔断。

6. 在Feign上使用熔断器

6.1 创建项目

spring boot集成Hystrix_第14张图片

6.2 配置

spring boot集成Hystrix_第15张图片

6.3 添加注解

spring boot集成Hystrix_第16张图片

6.4 feign配置

spring boot集成Hystrix_第17张图片

6.5 feign调用

spring boot集成Hystrix_第18张图片

6.6 feign的hystrix处理

spring boot集成Hystrix_第19张图片

6.7 service

spring boot集成Hystrix_第20张图片

6.8 controller

spring boot集成Hystrix_第21张图片

开启eureka client和feign
因为feign已经引入了hystrix的依赖,所以我们这里开启就行。
因为feign调用时写的是接口,而hystrix的熔断调用的方法就是实现了feign调用的接口的类。
同时这些类和接口需要被spring管理。
在feign调用的接口需要指定熔断处理类…

6.9 验证

启动,首先需要启动eureka-server和eureka client服务提供者
接着启动feign-hystrix(也就是feign)
访问:
spring boot集成Hystrix_第22张图片
关闭eureka client服务提供者
spring boot集成Hystrix_第23张图片
就去调用熔断处理的方法了。

7. RestTemplate和Feign对比

两者都能实现熔断处理。不过feign比RestTemplate更好。

  1. RestTemplate是使用硬编码指定熔断处理方法的,而feign则是指定类
  2. RestTemplate熔断处理方法没有限制,而feign则是实现接口,其方法已被定义
  3. RestTemplate请求单一,而feign有HttpUrlConnection,HttpClient,OkHttp多种方式
  4. RestTemplate需要自己增加依赖,而feign已集成,无需管理
  5. RestTemplate学习成本小于feign

8. Hystrix Dashboard & RestTemplate

8.1 创建

spring boot集成Hystrix_第24张图片

8.2 配置

spring boot集成Hystrix_第25张图片

8.3 配置hystrix dashboard

spring boot集成Hystrix_第26张图片
注意:
这里的urlMapping就是熔断器的元数据访问地址,如果不配置,会无法访问导致异常。
当然也可以添加多个,比如
spring boot集成Hystrix_第27张图片
因为内部是一个list,不存在覆盖的问题
spring boot集成Hystrix_第28张图片
spring boot集成Hystrix_第29张图片

8.4 配置ribbon

spring boot集成Hystrix_第30张图片

8.5 service

spring boot集成Hystrix_第31张图片

8.6 controller

spring boot集成Hystrix_第32张图片

8.7 注解

spring boot集成Hystrix_第33张图片

8.8 启动

spring boot集成Hystrix_第34张图片
注意,需要先启动eureka server以及eureka client服务提供者。
刚开始没有访问任何服务,此时eureka client还未获取eureka server 服务列表。
spring boot集成Hystrix_第35张图片
spring boot集成Hystrix_第36张图片
接着访问hystrix dashboard的主界面
在这里插入图片描述
spring boot集成Hystrix_第37张图片
接着访问:
spring boot集成Hystrix_第38张图片
其实就是配置的url实际上是等价的。
spring boot集成Hystrix_第39张图片

9. Hystrix Dashboard & Feign

9.1 创建

spring boot集成Hystrix_第40张图片

9.2 配置

spring boot集成Hystrix_第41张图片

9.3 配置hystrix dashboard

spring boot集成Hystrix_第42张图片

9.4 配置feign

spring boot集成Hystrix_第43张图片

9.5 dao.feign

spring boot集成Hystrix_第44张图片

9.6 hystrix.feign

spring boot集成Hystrix_第45张图片

9.7 service

spring boot集成Hystrix_第46张图片

9.8 controller

spring boot集成Hystrix_第47张图片

9.9 注解

spring boot集成Hystrix_第48张图片

9.10 启动

spring boot集成Hystrix_第49张图片
spring boot集成Hystrix_第50张图片
访问
spring boot集成Hystrix_第51张图片
spring boot集成Hystrix_第52张图片
spring boot集成Hystrix_第53张图片
spring boot集成Hystrix_第54张图片
这个就是元数据访问不到。

10. Turbine聚合监控

10.1 创建

spring boot集成Hystrix_第55张图片

10.2 配置

spring boot集成Hystrix_第56张图片
在这里插入图片描述

10.3 启动

spring boot集成Hystrix_第57张图片
spring boot集成Hystrix_第58张图片
访问
spring boot集成Hystrix_第59张图片
spring boot集成Hystrix_第60张图片
将hystrix dashboard需要两页的监控图像放到了一个页面上。

你可能感兴趣的:(spring,boot,微服务,Hystrix)