09-熔断器Hystrix

1. 雪崩效应

1.1. 雪崩效应描述

在微服务的架构中,服务间通常会形成相互依赖的关系.

场景一: 比如现在有三个微服务节点:A,B和C,B为A的消费者,C为B的消费者。假如由于网络波动或者A服务自身故障,导致B调用A服务的线程被挂起进入长时间的等待。在高并发的情况下可能导致B的资源被耗竭随之崩溃,从而导致C服务也不可用。这种情况下 就是雪崩效应

场景二: 比如现在有三个微服务节点:A,B和C, A是消费者 B和C是A的提供者,A如果想要完成一个功能 必须同时成功调用B和C 如果B和C 有一个出现问题 则A也会导致挂起,高并发的情况下 A的资源也会耗尽 最终崩溃

1.2. 雪崩效应条件

1: 服务提供者不可用 
  1.1: 硬件故障,硬件故障可能为硬件损坏造成的服务器主机宕机, 网络硬件故障造成的服务提供者的不可访问. 
  1.2: 程序Bug,程序出现bug,一直无法响应 
  1.3: 缓存击穿,缓存击穿一般发生在缓存应用重启, 所有缓存被清空时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端,造成服务提供者超负荷运行,引起服务不可用 
  1.4: 用户大量请求 在秒杀和大促开始前,如果准备不充分,用户发起大量请求也会造成服务提供者的不可用. ​ 
2: 重试加大流量 
  2.1: 用户重试在服务提供者不可用后, 用户由于忍受不了界面上长时间的等待,而不断刷新页面甚至提交表单 
  2.2: 代码逻辑重试服务消费端的会存在大量服务异常后的重试逻辑。这些重试都会进一步加大请求流量。 ​ 
3: 服务调用者不可用 
  3.1: 同步等待造成的资源耗尽,当服务消费者使用同步调用时,会产生大量的等待线程占用系统资源。一旦线程资源被耗尽,服务调用者提供的服务也将处于不可用状态,于是服务雪崩效应产生了。 ​

1.3. 报错演示

 

2. 服务降级

服务降级:表示一组服务,优先保证核心服务,或者正常的服务调用的同时,对不可用或者弱可用的服务,直接返回一个结果,不让线程进行等待 ​ 

服务降级可以在消费者 也可以在提供者

2.1. 消费者端添加依赖

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

2.2. 消费者端开启熔断

2.3. 控制器添加

 

2.4. 测试

 

2.5. 整个控制器配置

2.6. 测试

 

2.7. 开发中的配置

1:由于熔断可以写在消费者端,也可以写在提供者端,也可以两端都写,那么由于消费者访问提供者是有返回值类型的,那么我们的callback方法 也应该有对应的返回类型要求,否则将会二次报错 (ResponseEntity统一返回值类型的好处) ​ ​ 

2:我们一个服务有可能又是提供者又是消费者,所以能不能做到很灵活 比如想让谁处理 谁处理 

2.8. Feign接口工程中添加类

 

2.9. 接口中添加

 

2.10. 处理端开启hystrix

因为我们把熔断这个事,放到了OpenFeign的接口中,所以如果是提供者处理 就在提供者的配置文件中开启 如果是消费者处理,就在消费者配置文件中开启

 

2.11. 控制器中的内容可以去掉

 

3. 超时问题

3.1. 问题演示

 

 

3.2. 问题说明

因为我们设置了OpenFeign的超时时间是5秒,也就是说这5秒内返回数据都是正常的,但是当我们延时的时间在OpenFeign的范围内,也访问不到数据,触发了Hystrix,因为Hystrix的默认超时时间是1秒 如果1秒没有返回数据 默认熔断器打开  

3.3. 设置熔断器时间

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000 ## 一般设置的时间 大于等于OpenFeign的超时时间

3.4. 测试

 

4. 服务熔断

服务熔断:比如整个宿舍楼 所有的人都在看片,看到高潮的时候,此时由于功率过高,保险丝断了,这就是熔断 而Hystrix的熔断和保险丝还不一样,保险丝的熔断需要人为接上,而hystrix的熔断会自动再恢复

4.1. 熔断器状态

Closed  
    关闭状态(熔断器关闭) 所有请求正常访问

Open 
    打开状态(熔断器打开) 所有请求都会被降级 Hystrix会对请求情况进行统计 如果当一定时间内失败请求达到默认值(默认是百分之50并且访问数不低于20次)时 触发熔断 此时熔断器会打开 此时请求直接超时 不会再等待

HalfOpen 
    半打开状态   当熔断器打开之后5秒(默认值) 会进入半打开状态 释放部分请求通过 如果释放的这些请求是还是有不正常的  那么进入打开状态 然后再5秒进去半打开状态 然后请求的情况 是否再次进入打开状态(一直循环)    

4.2. 熔断器的配置

 

4.3. 遗憾的事情

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值