【Way to Spring Cloud 6】Spring Cloud Hystrix

时间:2024-04-09 07:46:36

Spring Cloud Hystrix

什么是Hytrix

分布式微服务架构面临的问题
在微服务架构中,根据业务来拆分成一个个的服务,而服务与服务之间存在着依赖关系 (比如用户调商品,商品调库存,库存调订单等等),在Spring Cloud中多个微服务之间可以用 RestTemplate+Ribbon 和 Feign
来调用。

在服务之间调用的链路上由于网络原因、资源繁忙或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,导致响应时间过长或不可用,此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

为了解决这个问题,业界提出了熔断器模型。

什么是服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制。在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:
【Way to Spring Cloud 6】Spring Cloud Hystrix
当服务之间调用的链路上某个微服务不可用或者响应时间太长时,会导致连锁故障。当失败的调用到一定阈值(缺省是5秒内20次调用失败) 就会启动熔断机制。在 SpringCloud 框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况。熔断机制的注解是 @HystrixCommand
【Way to Spring Cloud 6】Spring Cloud Hystrix
熔断器打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

服务熔断实战

创建 Hystrix 模块,microservice-cloud-08-provider-product-hystrix-8001,添加pom依赖
【Way to Spring Cloud 6】Spring Cloud Hystrix
修改yml,便于区分添加后缀
【Way to Spring Cloud 6】Spring Cloud Hystrix
修改controller
【Way to Spring Cloud 6】Spring Cloud Hystrix
修改启动类
【Way to Spring Cloud 6】Spring Cloud Hystrix
功能测试,Get不存在的id时候,抛出异常,进入fallback方法

Feign客户端服务熔断

Feign 是自带断路器的,也就是针对 消费者(客户端)进行服务熔断,需要在配置文件中开启它。
修改application.yml
【Way to Spring Cloud 6】Spring Cloud Hystrix
在已存在的 ProductClientService 接口上的 @FeignClient 注解中,加上 fallback 指定熔断处理类即可: ProductClientServiceFallBack.class
【Way to Spring Cloud 6】Spring Cloud Hystrix
创建 ProductClientServiceFallBack 类
【Way to Spring Cloud 6】Spring Cloud Hystrix
功能测试,80无法访问8001服务时,进入fallback处理类

Hystrix Dashboard监控平台搭建

除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少
请求多少成功,多少失败等。

Netflix 通过 hystrix-metrics-event-stream 项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard 的整合,对监控内容转化成可视化界面。
创建 hystrix-dashboard 模块,添加pom依赖
【Way to Spring Cloud 6】Spring Cloud Hystrix
配置application.yml
【Way to Spring Cloud 6】Spring Cloud Hystrix
创建启动类
【Way to Spring Cloud 6】Spring Cloud Hystrix
启动微服务监控,如下正常访问
【Way to Spring Cloud 6】Spring Cloud Hystrix
为要被监控的服务添加配置,在需要监控的服务 pom.xml 中的 dependencies 节点中新增 spring-boot-starter-actuator 监控依赖,
以开启监控相关的端点,并确保已经引入断路器的依赖 spring-cloud-starter-netflix-hystrix

【Way to Spring Cloud 6】Spring Cloud Hystrix
需要监控的服务 application.yml 配制中添加暴露端点
【Way to Spring Cloud 6】Spring Cloud Hystrix
功能测试

  • 正常访问 http://localhost:8001/product/get/1
    【Way to Spring Cloud 6】Spring Cloud Hystrix
  • 正常访问 http://localhost:8001/actuator/hystrix.stream
    【Way to Spring Cloud 6】Spring Cloud Hystrix
  • 测试可视化监控界面 http://localhost:9001/hystrix
    【Way to Spring Cloud 6】Spring Cloud Hystrix
    【Way to Spring Cloud 6】Spring Cloud Hystrix
  • 七色的含义如图。
  • 实心圆的颜色表示健康程度:绿>黄>橙>红,实心圆的大小表示请求流量:流量越大实心圆就越大。所以通过实心圆的展示,可以判断故障实例和高压力实例。
  • 曲线表示2分钟内流量的相对变化,可以通过它来观察上升下降趋势。

【Way to Spring Cloud 6】Spring Cloud Hystrix