Hystrx权威指南--Hystrix执行流程


Hystrix的执行流程如图所示:


流程说明:

1.每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中.

2.执行execute()/queue做同步或异步调用.

3.判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果关闭进入步骤.

4.判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤.

5.调用HystrixCommand的run方法.运行依赖逻辑

依赖逻辑调用超时,进入步骤8.

6.判断逻辑是否调用成功。返回成功调用结果;调用出错,进入步骤8.

7.计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态.

8.getFallback()降级逻辑。以下四种情况将触发getFallback调用:

  • run()方法抛出非HystrixBadRequestException异常。
  • run()方法调用超时
  • 熔断器开启拦截调用
  • 线程池/队列/信号量是否跑满

没有实现getFallback的Command将直接抛出异常,fallback降级逻辑调用成功直接返回,降级逻辑调用失败抛出异常.

9.返回执行成功结果

fallback条件

Name
Description
Triggers Fallback?
FAILURE execution threw an Exception YES
TIMEOUT execution started, but did not complete in the allowed time YES
SHORT_CIRCUITED circuit breaker OPEN, execution not attempted YES
THREAD_POOL_REJECTED thread pool at capacity, execution not attempted YES
SEMAPHORE_REJECTED semaphore at capacity, execution not attempted YES
EMIT value delivered (HystrixObservableCommand only) NO
BAD_REQUEST execution threw a HystrixBadRequestException NO
SUCCESS execution complete with no errors NO

任务执行失败,执行超时,依赖熔断,执行线程池满会fullback

熔断条件

熔断器实现三种类型的状态:open、half-open以及closed:


熔断执行流程:

 

  • 熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
  • 当熔断器开关打开时, 请求被禁止通过.

  • 熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复;失败,将继续保持熔断状态

自动熔断机制

  1. 当外部依赖I访问出错比例达到某个阈值时,自动触发熔断,之后一小段时间duration(可配置)内访问I的请求自动被降级处理,不再发给A
  2. 过了设定的duration时间后,放过一个请求到依赖I,探测是否恢复正常,如果恢复正常,解除熔断,否则继续保持通信熔断状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值