Hystrix是由Netfilx开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,方式级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。

  • 包裹请求:使用HystrixCommand包裹对依赖的调用逻辑。自动投递微服务方法
  • 跳闸机制:当某个服务的容错率超过一定的阀值时,Hystrix可以跳闸,停止请求该服务一段时间
  • 资源隔离:Hystrix为每个依赖都维护来一个小型的线程池(舱壁模式或信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等待,从而加速失败判定。
  • 监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时、以及被拒绝的请求等
  • 回退机制:当请求失败、超时、被拒绝,或断路器打开时,执行回退逻辑。回退逻辑由开发人员自行提供,例如返回一个缺省值
  • 自我修复:断路器打开一段时间后,会自动进入“半开”状态。

    舱壁模式

    Hystrix默认有个线程池(默认10个线程),为所有添加了@HystrixCommand方法提供线程,如果这些方法接受的请求超过了10个,请他请求就得等待/或者拒绝连接

    Hystrix工作流程

    image.png

  • 1、当调用出现问题时,开启一个时间窗

  • 2、在这个时间窗内,统计调用次数是否达到最小请求数
    • 如果没有达到,则重置统计信息,回到第1步
    • 如果达到了,则统计失败的请求数占比是否达到阀值,如果达到则跳闸如果没有达到则重置统计信息,回到第1步
  • 3、如果跳闸,则会开启一个活动窗口,每隔一定时间,Hystrix会让一个请求通过,到达那个问题服务,如成功重置断路器回到第1步,如失败回到第3步