Hystrix 原理

Hystrix 原理

描述

解决网络短暂无法访问、服务宕机等情况,Hystrix通过添加延迟阈值以及容错的逻辑,来帮助我们控制分布式系统间组件的交互,通过隔离服务间的访问点、停止他们之间的级联故障、提供可回退操作来实现容错。

功能

  • 当所依赖的网路服务发生延迟或者失败时,对方问的客户端程序进行保护
  • 在分布式系统中,停止级联故障
  • 网络恢复正常后,可以快速恢复客户端的访问能力
  • 调用失败时执行服务回退
  • 可支持实时监控、报警等操作

运作流程

1、在命令开始执行时,会创建响应的线程池

2、判断是否打开了缓存,如果打开了缓存就直接查找缓存并返回结果

3、判断断路器是否打开,如果打开了,就表示链路不可用,直接执行回退方法

4、判断线程池是否超负荷,超负荷则执行回退方法,否则就执行调用命令

5、执行命令调用服务

回退触发时机

1、断路器打开

2、线程池、队列满载

3、实际执行命令失败

回退模式

多命令示例转账场景
在这里插入图片描述

此时,如果想要多命令只执行一次回退的效果,那么A命令和B命令就不饿能有回退方法。如果A命令执行失败,并且有回退方法,此时将不再执行MainCommand的退回方法。

链式示例

在这里插入图片描述

此种场景会触发B命令的回退。

断路器开启条件

触发开启条件(必须满足两个)

1、整个链路达到一定阈值,默认情况下,10秒内产生超过20次请求,则符合第一个条件

2、满足第一个条件下,如果请求的错误百分比大于阈值,则会打开断路器,默认50%

断路器关闭条件

断路器打开后,在一段时间内,命令不会在执行,会一直触发回退,这段时间成为休眠期,休眠期默认为5秒,休眠结束后,Hystrix会尝试执行一次命令,此时断路器为半开状态,如果执行成功,断路器会关闭并清空链路的健康信息,如果执行失败,断路器会继续保持开启状态。

隔离机制

Hystrix提供两种隔离策略

Thread: 默认值,由线程池来决定命令的执行,入线程池满载了,则不会执行命令。默认线程池大小为10.

Semaphore:由信号量来决定命令的执行,当请求的并发数高于阈值时,就不再执行命令。相对于线程池策略,信号量策略开销更小,但是该策略不支持超时以及异步,一般不建议使用该策略。

猜你喜欢

转载自blog.csdn.net/Zaric_001/article/details/113924039