Hystrix

Hystrix

雪崩问题
一个服务,依赖于另一个功能服务的,如果这个功能服务挂掉了,那么依赖的服务就不能再用了,这种级联的失败, 我们可以称之为雪崩
概述
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等;
Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
https://github.com/Netflix/Hystrix

降级

什么是降级
降级是当我们的某个微服务响应时间过长,或者不可用了也就是那个微服务调用不了了,我们不能吧错误信息返回出来,或者让他一直卡在那里,所以要在准备一个对应的策略(一个方法);

当发生这种问题的时候我们直接调用这个方法来快速返回这个请求,不让他一直卡在那 ;

当某个微服务调用不了了要做降级,也就是说,要在调用方做降级(不然那个微服务都down掉了再做降级也没什么意义了)

降级步骤
1.在服务调用方法添加依赖
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
       	</dependency>

2.在启动类上添加注解@EnableHystrix

在这里插入图片描述
3.在控制器调用方法上添加注解@HystrixCommand(name=“要回调的方法”)

在这里插入图片描述
后续可以在被调用的服务当中模拟一个异常,如System.out.println(1/0),看是否回调所写的应对方法。


超时监听

1.模拟响应过慢

在这里插入图片描述
2.当响应过慢(默认值是1000),访问时,也会进入到指定的降级方法当中
https://github.com/Netflix/Hystrix/wiki/Configuration
3.在客户端配置文件当中配置超时时间

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000

4.使用RestTemplate直接调用
](https://img-blog.csdnimg.cn/20200924182450867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU1NzIzOA==,size_16,color_FFFFFF,t_70#pic_center

使用Fengin调用没有效果,feign对有Hystrix的集成默认情况下是关闭的,我们需要通过参数来开启:

feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

熔断

概念
也叫断路器,CirleBreak;
当一个微服务调用多次出现问题时(默认是10秒内20次当然 这个也能配置),hystrix就会采取熔断机制,不再继续调用你的方法,而是直接调用降级方法,这样就一定程度上避免了服务雪崩的问题,会在默认5秒钟内和电器短路一样,5秒钟后会试探性的先关闭熔断机制,但是如果这时候再失败一次{之前是20次} 那么又会重新进行熔断;
配置
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2000 #设置超时时长
      circuitBreaker:
        requestVolumeThreshold: 5   #  10秒种访问5次都失败的话, 会断开服务,不调用方法,直接进入fallback
        sleepWindowInMilliseconds : 5000   #默认是55秒后尝试再访问一次服务器
熔断状态机
Closed :关闭状态-断路器关闭,所有请求都正常访问
Open: 打开状态-断路器打开,所有请求都会被降级,Hystix会对请求情况计数,当一定时间内失败请求百分比达到阀值,则触发熔断,断路器会完全关闭,默认失败比例阀值是50% ,请求次数最少不低于20次
Half Open: 半开状态-Closed状态不是永久的,关闭后进入休眠时间 (默认是5s),随后断路器会进行半开状态,此时会释放部分请求通过 , 若这些请求都是健康的,则完成打开断路器,否则继续保持关闭,再次进行休眠倒计时

限流

概念
限流, 顾名思义, 就是限制你某个微服务的使用量(可用线程);
hystrix通过线程池的方式来管理你的微服务调用,他默认是一个线程池(10大小) 管理你的所有微服务;
一个线程可以理解为一个请求,当10请求同时访问, 都没有得要响应的时候,就会自动调用fallback方法
手动配置
在控制器方法上
@HystrixCommand(fallbackMethod = "fallbackMethod",
            threadPoolKey = "goods",
            threadPoolProperties ={
            @HystrixProperty(name = "coreSize",value = "5"),
            @HystrixProperty(name = "maxQueueSize",value = "1"}
    })

hreadPoolKey 就是在线程池唯一标识, hystrix 会拿你这个标识去计数,看线程占用是否超过了, 超过了就会直接降级该次调用
比如, 这里coreSize给他值为5,那么假设你这个方法调用时间是3s执行完, 那么在3s内如果有超过5个请求进来的话, 剩下的请求则全部降级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值