• SpringCloud学习笔记(12)----Spring Cloud Netflix之Hystrix断路器的流程和原理


        

    工作流程(参考:https://github.com/Netflix/Hystrix/wiki/How-it-Works)

      1、 创建一个HystrixCommand或HystrixObservableCommand实例

        第一步就是构建一个HystrixCommand或HystrixObservableCommand实例来向其他的组件发出操作请求,通过构造方法创建实例。

        HystrixCommand:返回一个单响应

        HystrixObservableCommand: 返回一个观察者发出的响应

      2. 这里 有 4个 方法,前两只适用于HystrixCommand不适用于HystrixObservableCommand

        execute():阻塞型方法,返回单个结果(或抛出异常)

        queue(): 异步方法,返回一个Future对象,可以从中取出单个结果(或抛出异常)

        observe(): 返回Observable对象

        toObserve(): 返回Observable对象

      3. 缓存判断

        检查缓存内是否有对应指令的结果,如果有的话,将缓存的结果直接以Observable对象形式返回。

      4. 断路器判断

       检查 Circuit Breakerr的状态如果 Circuit Breaker的状态为开启 Hystrix将不会执行对应指令,而是直接进入失败处理状态(图中 8)。如果Circuit Breaker的状态为关闭,Hystrix会继续执行(图 5)

      5. 线程池、任务队列、信号量的检查 

       确认是否有足够的资源执行操作指令。当线程池和队列(或者是信号量不使用隔离模式的时候 资源满的时候 ,Hystrix将不会执行对应指令并且会直接进入失败处理状态 (图 8)

      6. HystrixObservableCommand.construct()和HystrixCommand.run()

       如果资源充足,Hystrix将会执行操作指令,操作指令的调用最终都会到这两个方法:

       HystrixCommand.run():返回一个响应或者抛出一个异常。

       HystrixObservableCommand.construct(): 返回一个可观测的发出响应(s)或发送一个onError通知

       如果执行指令的时间超时,执行线程会抛出TimeException异常。Hystrix会抛弃结果并直接进入失败状态。如果执行指令成功,Hystrix会进行一系列的数据记录,然后返回执行的结果。

      7. 统计断路器的健康情况

        Hystrix会根据记录的数据来计算失败比率,一旦失败比率达到某一阀值将自动开启Circuit Breaker

      8. 回退

       如果我们再Command中实现了HystrixCommand..getFallback方法(或HystrixObservableCommand.resumeWithFallback())方法,Hystrix会返回对应方法的结果,如果没有实现这些方法,Hystrix仍然会返回一个空的Observable对象,并且可以通过onError来终止并处理错误。

      调用不同的方法放回不同的结果:

      execute(): 将会抛出异常

      queue(): 将会返回一个Future对象,如果调用它的get()方法将会抛出异常。

      observe()和toObservable():都会返回上述的Observable对象

      9. 返回成功

       如果Hystrix执行成功,返回的响应取决于在步骤2中调用命令。

       execute():阻塞型方法,返回单个结果(或抛出异常)

       queue(): 异步方法,返回一个Future对象,可以从中取出单个结果(或抛出异常)

       observe(): 返回Observable对象

       toObserve(): 返回Observable对象

    断路器工作原理

      

      断路器开启或者关闭的条件:

         1、 当满足一定的阀值时候 (默认 10 秒内 超过 20 个请求 次数 )

         2、 当失败率达到一定的时候( 默认 10 秒内超过 秒内超过 50%50%50%的请求失败 )

         3、 到达以上阀值 ,断路器将会开启

         4、 当开启的时候 ,所有请求 都不会进行转发

         5、 一段时间之后( 默认是 5秒),这个时候断路器是半开状态, 会让其中一请求进行转发。如果成功断路器会关闭,若失败继续开启。重复 4和 5。

    HystrixCircuitBreaker接口

      

    原文 SpringCloud学习笔记(12)----Spring Cloud Netflix之Hystrix断路器的流程和原理

  • 相关阅读:
    在多租户(容器)数据库中如何创建PDB:方法6 DBCA本地克隆PDB
    在多租户(容器)数据库中如何创建PDB:方法5 DBCA远程克隆PDB
    1级搭建类104-Oracle 12cR2 单实例 FS(阿里云)公开
    在多租户(容器)数据库中如何创建PDB:方法4 克隆远程Non-CDB
    在多租户(容器)数据库中如何创建PDB:方法3 克隆远程PDB
    番外:克隆本地PDB中其他参数和子句的说明
    在多租户(容器)数据库中如何创建PDB:方法2 克隆本地PDB
    Oracle Solaris 10 重启后提示 Bad PBR sig
    在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB
    0级搭建类009-Fedora 30 安装(F30) 公开
  • 原文地址:https://www.cnblogs.com/xiaoshen666/p/10844202.html
Copyright © 2020-2023  润新知