Hytrix原理

Hytrix容错机制

熔断

  1. 在一个统计时间窗口(HYST rixCommandProperties.metricsRollingStatisticalWindowInMilliseconds())内,处理的请求数达到设置的最小阈值(HYST)rixCommandProperties.circuitBreakerRequestVolumeThreshold()),错误百分比超过设置的最大阈值(HYST)rixCommandProperties.circuitBreakerThreshold() ) )此时断路器分闸,断路器状态由合闸切换为分闸。
  2. 当断路器断开时,它将直接融合所有请求(快速失败)并经过回退逻辑。
  3. 经过一个休眠窗口时间(HYST rixCommandProperties.circuitBreakerSleepWindowInMilliseconds()),Hystrix会释放一个进行后续服务并将断路器开关切换到半开(half OPEN)。如果请求失败,断路器将熔断开关切换到OPEN状态,继续熔断所有请求,直到下一个休眠时间窗口到来;如果请求成功,断路器将切换到 CLOSED 状态,此时允许所有请求通过,直到发生一步,断路器开关才会切换到 OPEN 状态。
    在这里插入图片描述

资源隔离

资源隔离主要指对线程的隔离。Hystrix提供了两种线程隔离方式:线程池和信号量。

线程池隔离

通过将发送请求线程与执行请求的线程分离,可有效防止发生级联故障。当线程池或请求队列饱和时,Hystrix将拒绝服务,使得请求线程可以快速失败,从而避免依赖问题扩散。
在这里插入图片描述

信号量隔离

使用线程池时,发送请求的线程和执行依赖服务的线程不是同一个,而使用信号量时,发送请求的线程和执行依赖服务的线程是同一个,都是发起请求的线程。

服务降级

Fallback相当于是降级操作。 对于查询操作, 我们可以实现一个fallback方法, 当请求后端服务出现异常的时候, 可以使用fallback方法返回的值。 fallback方法的返回值一般是设置的默认值或者来自缓存。告知后面的请求服务不可用了,不要再来了。

请求缓存

请求缓存:比如一个请求过来请求我userId=1的数据,你后面的请求也过来请求同样的数据,这时我不会继续走原来的那条请求链路了,而是把第一次请求缓存过了,把第一次的请求结果返回给后面的请求。

请求合并

请求合并:我依赖于某一个服务,我要调用N次,比如说查数据库的时候,我发了N条请求发了N条SQL然后拿到一堆结果,这时候我们可以把多个请求合并成一个请求,发送一个查询多条数据的SQL的请求,这样我们只需查询一次数据库,提升了效率。

Hystrix流程图

在这里插入图片描述
1、每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中;
2、使用调用HystrixCommand的execute来执行一个业务方法调用。Hystrix除了提供了execute方法,另外还提供了3种方法(queue、observer、toObserver);
3、判断是否使用缓存响应请求,若启用了缓存,且缓存可用,直接使用缓存响应请求。【Hystrix支持请求缓存,但需要用户自定义启动】
4、判断熔断器是否打开,如果打开跳到步骤8;
5、判断线程池/队列/信号量是否已满,已满则跳到步骤8;
6、调用HystrixCommand的run方法。运行依赖逻辑,如果执行失败或者超时,跳到步骤8;如果执行成功则直接返回结果;
7、计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态
8、走Fallback备用逻辑。

以下四种情况将触发getFallback调用:
8.1 熔断器开启拦截调用
8.2 线程池/队列/信号量是否跑满
8.3 run()方法调用超时
8.4 run()方法抛出非HystrixBadRequestException异常

https://www.jianshu.com/p/3e8148d65786
流程图:https://blog.csdn.net/qq_43437044/article/details/128466503
https://www.jianshu.com/p/3e8148d65786

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值