zoukankan      html  css  js  c++  java
  • Spring-Cloud-Netflix-Hystrix

    雪崩问题

    一个服务,依赖于另一个功能服务的,如果这个功能服务挂掉了,那么依赖的服务就不能再用了,这种级联的失败, 我们可以称之为雪崩

    Hystrix概述

    Hystrix github地址

    1. Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等
    2. Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

    降级

    什么是降级?

    1. 降级是当我们的某个微服务响应时间过长,或者不可用了也就是那个微服务调用不了了,
    2. 我们不能吧错误信息返回出来,或者让他一直卡在那里,所以要在准备一个对应的策略(一个方法)
    3. 当发生这种问题的时候我们直接调用这个方法来快速返回这个请求,不让他一直卡在那
    4. 当某个微服务调用不了了要做降级,也就是说,要在调用方做降级(不然那个微服务都down掉了再做降级也没什么意义了)

    降级步骤

    1. 在服务调用方法添加依赖
      在这里插入图片描述
    		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
    
    1. 启动类加入注解@EnableHystrix
      在这里插入图片描述
    @EnableHystrix
    
    1. 在控制器调用方法上添加注解@HystrixCommand
      在这里插入图片描述
    2. 在goods服务当中模拟一个异常
      在这里插入图片描述
      启动运行
      在这里插入图片描述

    超时监听

    1. 模拟响应过慢
      在这里插入图片描述
      当响应过慢(默认值是1000),访问时,也会进入到指定的降级方法当中

    2. 在客户端配置文件当中配置超时时间

    hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 9000 # 设置hystrix的超时时间为9000ms
    
    ribbon:
      ReadTimeout: 10000
      ConnectTimeout: 10000 
    

    使用Fengin调用
    Feign默认也有对Hystix的集成,1默认情况下是关闭的。我们需要通过下面的参数来开启:

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

    运行
    在这里插入图片描述
    把goods的睡眠时间改成1000 运行:
    在这里插入图片描述
    运行:
    在这里插入图片描述

    熔断

    概述:

    1. 也叫断路器,CirleBreak
    2. 熔断,就好像我们生活中的跳闸一样, 比如说你的电路出故障了,为了防止出现大型事故 这里直接切断了你的电源以免意外继续发生
    3. 当一个微服务调用多次出现问题时(默认是10秒内20次当然 这个也能配置),hystrix就会采取熔断机制
    4. 不再继续调用你的方法, 而是直接调用降级方法,这样就一定程度上避免了服务雪崩的问题
    5. 会在默认5秒钟内和电器短路一样,5秒钟后会试探性的先关闭熔断机制,但是如果这时候再失败一次{之前是20次} 那么又会重新进行熔断

    线程隔离降级处理, 如果请求延迟过高,如果超时,返回一个异常信息:

    1. 假设超时2秒, 但是用户也要等3秒才会返回异常信息
    2. 正常情况下, 一个请求只需要30ms就够了, 因为超时, 导致要多等2秒多,并发能力急剧下降,如果每次来都超时, 就认为这个服务可能存在问题,就可以认为 电路中负载最高的电压
    3. 此时, 就把此服务断开,再去访问时, 就不需要等待3秒,直接返回异常信息,把失败的时长急剧缩短 保证其它服务的高可用,这个服务就被临时断掉 4 断开很容易, 解决如何断开后, 再去给它连接回来, Hystrix就可以去解决这种问题

    熔断配置

    配置:
    在这里插入图片描述

    hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 9000 #设置超时时长
          circuitBreaker:
            requestVolumeThreshold: 5   #  10秒种访问5次都失败的话, 会断开服务,不调用方法,直接进入fallback
            sleepWindowInMilliseconds : 5000   #默认是5秒 5秒后尝试再访问一次服务器
    

    goods模拟异常
    在这里插入图片描述

    1. 调用5次后,就不再调用goods方法 持续调用后,中间还会调用一次goods方法 ,之后, 就不会再调用
    2. 默认5秒钟后会试探性的先关闭熔断机制,但是如果这时候再失败一次{之前是20次} 那么又会重新进行熔断

    限流

    概念:

    1. 限流, 顾名思义, 就是限制你某个微服务的使用量(可用线程)
    2. hystrix通过线程池的方式来管理你的微服务调用,他默认是一个线程池(10大小) 管理你的所有微服务
    3. 一个线程可以理解为一个请求,当10请求同时访问, 都没有得要响应的时候,就会自动调用fallback方法

    默认什么都不设置
    当访问请求次数超过10的时候 , 会调用fallback方法

    feign整合hystrix

    feign 默认是支持hystrix的, 但是在Spring - cloud Dalston 版本之后就默认关闭了, 因为不一定业务需求要用的到

    1. 开启feign 对hystrix的支持
    feign:
      hystrix:
        enabled: true #开启feign当中的hystrix
    

    方式1-fallback

    1. 创建一个类实现服务FeignClient接口
      在这里插入图片描述
    2. 在控制器当中调用
      在这里插入图片描述
      第一次运行
      在这里插入图片描述
      连续刷新11次后
      在这里插入图片描述

    方式2-fallbackFactory

    1. 创建一个类实现FallbackFactory
      在这里插入图片描述
    2. 在服务FeignClient接口上配置实现类
      在这里插入图片描述
    3. 在控制器当中调用
      在这里插入图片描述
      效果和第一种方式一样
  • 相关阅读:
    截取字符
    vue中移动端调取本地的复制的文本
    vue中用 async/await 来处理异步
    vue中子组件调用父组件里面的数据和方法 父组件调用子组件的数据和方法
    spy-debugger 安装以及使用
    vuex用法-新手一
    monent API详解
    原生js标识当前导航位置(给当前导航一个className=active)
    webpack 4.0 配置文件 webpack.config.js文件的放置位置
    移动端部分安卓手机(三星,小米)竖拍上传图片预览的时候发生旋转问题
  • 原文地址:https://www.cnblogs.com/joker-dj/p/12667799.html
Copyright © 2011-2022 走看看