SpringCloud——Hystrix断路器

Hystrix是什么,能干什么?

  1. 分布式系统容易出现的问题
    在这里插入图片描述
  2. Hystrix是什么?
    在这里插入图片描述
  3. Hystrix能干什么?

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

  1. 官网资料
    https://github.com/Netflix/Hystrix/wiki/How-To-Use

Hystrix的服务熔断

  1. 服务熔断是什么?
    在这里插入图片描述
    在这里插入图片描述
  2. 构建带有Hystrix断路器的服务提供者。 注意:要在服务消费者上建立Hystrix
    2.1 先导入Hystrix断路器的依赖,在服务
    在这里插入图片描述
    2.2 在Controller类中的某一个需要服务熔断的方法上增加 @HystrixCommand注解。
    在这里插入图片描述
    2.3 在服务提供者的主启动类上添加启动注解==@EnableCircuitBreaker注解==
    在这里插入图片描述
    2.4 测试:
    先启动Eureka,启动服务提供者,启动服务消费者

Hystrix 的服务降级

什么是服务降级?

在这里插入图片描述

服务降级是在服务消费者端,实现过程

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

整体资源快不够了,忍痛将某些服务单元先关掉,关闭后还要返回一些可处理的备选方法,待渡过难关,再开启回来,

使用步骤:

1、在api层创建一个一个降级服务,并实现FallbackFactory接口,且泛型为Feign的调用接口

切记,必须在类上方加上@Component注解

@Component
public class UserClientService implements FallbackFactory<UserService> { //Feign调用的接口
    @Override
    public UserService create(Throwable throwable) {
        //构建匿名
        return new UserService() {
            @Override
            public User findById(Integer id) {
               return  new User(id,"该ID:"+id+"没有对应的数据","Hystrix此服务以关闭");
            }
            @Override
            public List<User> findAll() {
                return null;
            }
        };
    }
}

2、在api的接口中(此处我的分布式项目中使用的是Feign的调用方法)

@FeignClient(value = "MICROSERVICE-PRODUCT",fallbackFactory = UserClientService.class) //指明服务关闭后,会返回方法的类的字节码
public interface UserService {
        @GetMapping("/product/findone/{id}")
        public User findById(@PathVariable("id") Integer id);
        @GetMapping("/product/list")
        public List<User> findAll();
}

3、在消费者模块的配置文件yml中

feign:  #开启服务熔断服务降级
  hystrix:
    enabled: true

4、测试

开启eureka的集群,提供者,Feign的消费者,然后进行测试

当我们的整体资源不快够用,需要关闭提供该服务,又不想整体资源因依赖这个服务而发生级联效应,我们使用了上面的技术进行了服务降级处理,

当我们关闭此服务后

服务熔断和服务降级的区别

在这里插入图片描述
两者其实从有些角度看是有一定的类似性的:
目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段;
最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用;
粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改);
自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关 预置、配置中心都是必要手段;

两者的区别也是明显的:
触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;
管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)

总结:
  分布式项目中,有数十个依赖关系,每个依赖关系在某些时候不可避免地失败,

服务雪崩:当A调用微服务B,B调C,和其他微服务,这是扇出,当扇出链路上某个微服务调用响应时间过长或者不可用,对微服务的A的调用就会占用越来越多的系统资源,导致系统崩溃,所谓的雪崩效应

服务熔断:一般是某个服务异常引起的,相当于“保险丝”,当某个异常条件被触发,直接熔断整个服务,不是等到此服务超时

服务降级:降级一般是从整体负荷考虑,当某个服务熔断之后,服务器将不再被调用,客户端可自己准备一个本地的fallback回调,返回一个缺省值,虽然服务水平下降,当能用,比直接挂掉要强

springcloud是spring,采用AOP的思想,异常处理信息,我们某个服务的功能是每个方法,我们还可以使用AOP直接在api层通过接口设置服务降级

Hystrix的服务监控和服务限流

Hystrix实现了准实时的调用监控

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

服务监控实现步骤

在这里插入图片描述

  1. 建立服务消费者
  2. 修改pom文件
    在这里插入图片描述
  3. 消费者application.yml文件
    在这里插入图片描述
  4. 服务消费者主启动类上添加 @EnableHystrixDashboard注解
    在这里插入图片描述
  5. 所有服务提供者都需要监控依赖配置
    在这里插入图片描述
  6. 启动微服务,启动监控,启动Eureka,启动服务提供者,成功访问以下地址出现该页面表示成功。
    在这里插入图片描述
    在9001的监控界面输入要监控的微服务(http://localhost:8001/hystrix.stream)
    在这里插入图片描述
    会看到以下监控内容
    在这里插入图片描述
    (1)Deplay 该参数用来控制服务器上轮询监控信息的延迟时间,默认是2000毫秒,可以通过配置该属性来降低客户端的网络和cpu消耗。

(2)Title该参数对应了头部标题Hystrix Stream之后的内容,默认会使用哦具体监控实例的URL,可疑通过配置该信息来展示更合适的标题。

实心圆:共有两种含义。它通过颜色的变化代表了实例的健康程度,它的健康程度从 绿色 > 黄色 > 橙色 > 红色 递减;

该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大实心圆就越大,所以通过该实心圆的展示,就可以在大量实例中快速的发现故障实例和高压力实例。

<5> 说明

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值