Hystrix

Posted ityannic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix相关的知识,希望对你有一定的参考价值。

一、场景

  雪崩效应:

    现在微服务架构,一个系统会依赖多个服务。当其中一个服务不可用时,会造成级联故障,从而导致整个系统不可用。 

二、Hystrix是什么

  Hystrix是一个熔断器,通过限流、降级、隔离这三个方面去实现系统的容错性,保障系统的稳定运行。

三、Hystrix工作流程

  技术图片

技术图片

技术图片
  1.调用hystrix command
  2.两种方式:同步和异步
  3.判断熔断器是否打开,如果打开则跳到第8步
  4.判断线程池队列是否满了或者信号量是否用完了,满了则走第8步
  5.没有则运行,成功则跳到第6步,超时则跳到第8步
  6.执行成功则报告metrics,跳到第9步
  7.任何超时,失败,成功的执行结果都会报告metrics,计算熔断器监控指标
  8.走fallback降级流程
  9.返回成功响应报文
 

四、断路器内核

技术图片

 

技术图片

 

断路器的内核是有10个桶,每个桶里统计1秒的成功,失败,超时,拒绝的请求个数,每1秒生成1个桶。
   1.调用allowRequest()判断是否允许提交请求
   2.判断熔断器是否打开,失败数/成功数+失败数=失败比例,如果失败比例>阀值,则打开熔断器
    1.如果关闭则进入到第3步
    2.如果是打开的,则判断是否过了一个睡眠时间,没有则返回失败,有的话则放1个请求过去
   3.运行,标记此次请求成功或失败结果

五、降级方式

  1.fail fast:快速失败

    HystrixCommand的run方法抛异常

  2.fail silent:安静失败

    降级函数:getfallback()

      return null;return new Option<T>(); return Collections.emptyList(); return Collections.emptyMap();

  3.static fallbak:

    降级函数:getfallback()

      return true; return DEFAULT_OBJECT;

  4.fallback by network: 通过网络进行降级

    主服务失败,调用辅助服务进行降级 

  5.primary + secondary with fallback:主次降级

 

六、隔离

   Hystrix支持两种隔离方式:信号量隔离和线程池隔离。

  信号量隔离 vs 线程池隔离
  信号量隔离:
    优点:轻量,无额外开销
    缺点:不支持任务排队和主动超时
       不支持异步调用 
    适用:受信客户
         高扇出(网关)
         高频高速调用(cache)
  线程池隔离:
    优点:支持排队和超时
         支持异步调用
    缺点:会产生额外开销
    适用: 不受信客户 
    有限扇出

以上是关于Hystrix的主要内容,如果未能解决你的问题,请参考以下文章

聊聊Hystrix

Hystrix强力护卫

Hystrix服务容错处理

王新栋 | Hystrix技术解析

微服务系列之Hystrix服务容错

面试官:为什么需要 Hystrix?