SpringCloud:服务熔断/降级-Hystrix断路器(3)

hystrix工作流程  /  服务监控hystrixDashboard

hystrix工作流程

工作流程图

SpringCloud:服务熔断/降级-Hystrix断路器(3)

步骤说明

  • 创建 HystrixCommand(用在依赖的服务返回单个操作结果的时候) 或 HystrixObserableCommand(用在依赖的服务返回多个操作结果的时候) 对象。
  • 命令执行。其中 HystrixComand 实现了下面前两种执行方式;而 HystrixObservableCommand 实现了后两种执行方式:execute():同步执行,从依赖的服务返回一个单一的结果对象, 或是在发生错误的时候抛出异常。queue():异步执行, 直接返回 一个Future对象, 其中包含了服务执行结束时要返回的单一结果对象。observe():返回 Observable 对象,它代表了操作的多个结果,它是一个 Hot Obserable(不论 “事件源” 是否有 “订阅者”,都会在创建后对事件进行发布,所以对于 Hot Observable 的每一个 “订阅者” 都有可能是从 “事件源” 的中途开始的,并可能只是看到了整个操作的局部过程)。toObservable(): 同样会返回 Observable 对象,也代表了操作的多个结果,但它返回的是一个Cold Observable(没有 “订阅者” 的时候并不会发布事件,而是进行等待,直到有 “订阅者” 之后才发布事件,所以对于 Cold Observable 的订阅者,它可以保证从一开始看到整个操作的全部过程)。
  • 若当前命令的请求缓存功能是被启用的, 并且该命令缓存命中, 那么缓存的结果会立即以 Observable 对象的形式 返回。
  • 检查断路器是否为打开状态。如果断路器是打开的,那么Hystrix不会执行命令,而是转接到 fallback 处理逻辑(第 8 步);如果断路器是关闭的,检查是否有可用资源来执行命令(第 5 步)。
  • 线程池/请求队列/信号量是否占满。如果命令依赖服务的专有线程池和请求队列,或者信号量(不使用线程池的时候)已经被占满, 那么 Hystrix 也不会执行命令, 而是转接到 fallback 处理逻辑(第8步)。
  • Hystrix 会根据我们编写的方法来决定采取什么样的方式去请求依赖服务。HystrixCommand.run() :返回一个单一的结果,或者抛出异常。HystrixObservableCommand.construct(): 返回一个Observable 对象来发射多个结果,或通过 onError 发送错误通知。
  • Hystrix会将 “成功”、”失败”、”拒绝”、”超时” 等信息报告给断路器, 而断路器会维护一组计数器来统计这些数据。断路器会使用这些统计数据来决定是否要将断路器打开,来对某个依赖服务的请求进行 “熔断/短路”。
  • 当命令执行失败的时候, Hystrix 会进入 fallback 尝试回退处理, 我们通常也称该操作为 “服务降级”。而能够引起服务降级处理的情况有下面几种:第4步: 当前命令处于”熔断/短路”状态,断路器是打开的时候。第5步: 当前命令的线程池、 请求队列或 者信号量被占满的时候。第6步:HystrixObservableCommand.construct() 或 HystrixCommand.run() 抛出异常的时候。
  • 当Hystrix命令执行成功之后, 它会将处理结果直接返回或是以Observable 的形式返回。

服务监控 HystrixDashBoard

除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard)Hystrix会持续的记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等,Netflix通过hystrix-metrics-event-stream 项目实现了对以上指标的监控,Spring Cloud提供了Hystrix Dashboard的整合,对监控内容转化成可视化页面。

1搭建HystrixDashBoard

1.1建module

cloud-consumer-hystrix-dashboard9001

1.2 pom

新增

pom.xml

1.3yml

 1.4主启动类

HystrixDashboardMain9001+新注解@EnableHystrixDashboard

HystrixDashboardMain9001

所有provider微服务(生产者)提供类8001/8002/8003都需要监控依赖配置

确保所有生产者微服务中均包含spring-boot-starter-actuator依赖

启动测试

http://localhost:9001/hystrix

SpringCloud:服务熔断/降级-Hystrix断路器(3)

断路器演示(服务监控hystrixDashboard)

注意事项

注意:新版本Hystrix需要在需要监控的微服务端的主启动类中指定监控路径,不然会报错: 404  unable…..

在被监控的服务端主启动类中添加以下代码,这里以【PaymentHystrixMain8001】为示例

测试

1.启动7001, 8001,9001,

2.9001监控8001,将 http://localhost:8001/hystrix.stream  填入 http://localhost:9001/hystrix

SpringCloud:服务熔断/降级-Hystrix断路器(3)

3.自测8001端口:http://localhost:8001/payment/circuit/-5,http://localhost:8001/payment/circuit/5

4.点击监控页面的 monitor stream

5.多次正常访问: http://localhost:8001/payment/circuit/5

SpringCloud:服务熔断/降级-Hystrix断路器(3)

6.多次异常访问 :http://localhost:8001/payment/circuit/-5

断路器处于开启状态  Open

SpringCloud:服务熔断/降级-Hystrix断路器(3)

监控页的各个地方表示什么意思?

7色1圈

SpringCloud:服务熔断/降级-Hystrix断路器(3)

实心圆:共有两种含义。它通过颜色的变化代表了实例的健康程度,它的健康度从绿色<黄色<橙色<红色递减。
该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。所以通过该实心圆的展示,就可以在大量的实例中快速的发现故障实例和高压力实例。
曲线:用来记录2分钟内流量的相对变化,可以通过它来观察到流量的上升和下降趋势。

图片说明

SpringCloud:服务熔断/降级-Hystrix断路器(3)

SpringCloud:服务熔断/降级-Hystrix断路器(3)

正文完
 0