SpringCloud-微服务-Hystrix


熔断器 Hystrix

什么是Hystrix

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

为什么要有Hystrix

在微服务系统中,一个用户请求可能需要调用几个服务才能完成。当某一个服务,出现网络延迟或者故障时,
整个用户请求会处于阻塞状态,其他服务需要等待。在高并发的情况下,单个服务的延迟会导致整个请求都处于延迟状态,可能在几秒钟就使
整个服务处于线程负载饱和的状态。某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果就是整个服务
的线程资源消耗殆尽。导致整个微服务系统都不可用,即雪崩效应。为了防止雪崩效应,因而产生了熔断器模型。 Hystrix 是在业界表现非常好的一个熔断器
模型实现的开源组件,它是 Spring Cloud 组件不可缺少的一部分。

Hystrix的设计原则

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

RestTemplate 和 Ribbon上使用熔断器

Hystrix配置

在上个项目基础上,修改eureka-ribbon-client配置文件:引入依赖:

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-hystrix</artifactId>
   </dependency>

在启动类上添加@EnableHystrix注解开启Hystrix熔断功能。
修改RibbonService:

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * description: RibbonService
 * @author zwq
 * @date 2021/10/20 22:07
 */
@Service
public class RibbonService {

    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError")
    public String hi(String name) {
        return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
    }

    public String hiError(String name){
        return "hi,"+name+",error";
    }

}

加上@HystrixCommand 注解,hi方法就能启动Hystrix熔断器功能。
其中,fallbackMethod 为处理回退( fallback )逻辑的方法。

启动服务,测试

依次启动eureka-server、eureka-client、eureka-ribbon-client。
访问http://localhost:8764/hi

关闭eureka-client,可以看到:

由此可见,当eureka-client不可用时,开启了熔断器,最后进入fallbackMethod。
这样的好处就是通过快速失败,请求能够得到及时处理,线程不在阻塞。

Hystrix Dashboard监控熔断状态

Hystrix Dashboard 是监控 Hystrix 的熔断器状况的一个组件,提供了数据监控和友好的图形化展示界面

新增依赖

<!--hy图形界面-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
      </dependency>

      <!--hy图形界面-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>

在启动类加上@EnableHystrixDashboard注解
依次启动eureka-server,eureka-client,eureka-ribbon-client服务。
访问:http://localhost:8764/hi
访问:http://localhost:8764/hystrix.stream ,查看熔断器数据指标。

访问:http://localhost:8764/hystrix ,然后在界面上填写http://localhost:8764/hystrix.stream 、2000、zwq(这个随意填)

点击monitor,进入页面:

该页面显示了熔断器的各种数据指标


  目录