Hystrix - 什么是Hystrix?Hystrix的整体流程

回到顶部(go to top)

一、什么是Hystrix? 有什么用?

总的来说:为了预防服务雪崩Hystrix - 什么是服务雪崩?,通过Hystrix的下面三点来预防服务雪崩:

  1. 资源隔离(线程池隔离):Hystrix - 资源隔离 (线程池模式+信号量模式)
  2. 断路器,
  3. 服务降级

 

举个例子:

“订单服务”调用“积分服务”的时候,一旦在“订单服务”内,分配给“积分服务”的hystrix线程池中的线程全被占用且无响应,

“订单服务”的熔断器Circuit Breaker就会打开,不再调用实际的“积分服务”,改为调用降级逻辑。

 

 

回到顶部(go to top)

二、Hystrix流程图

简版

下图为Hystrix服务调用的内部逻辑:

 

 

    1. 构建Hystrix的Command对象, 调用执行方法.

    2. Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.

    3. 若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.

    4. 若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.

    5. 若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

    6. 若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

    7. 若服务执行成功, 返回正常结果.

    8. 若服务降级方法getFallback执行成功, 则返回降级结果.

    9. 若服务降级方法getFallback执行失败, 则抛出异常.

 

详细版

流程说明:
1:每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中。
2:执行execute()/queue做同步或异步调用。
3:判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果关闭进入步骤。
4:判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤。
5:调用HystrixCommand的run方法。运行依赖逻辑
5a:依赖逻辑调用超时,进入步骤8。
6:判断逻辑是否调用成功
6a:返回成功调用结果
6b:调用出错,进入步骤8。
7:计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态。
8:getFallback()降级逻辑。
以下四种情况将触发getFallback调用:
(1):run()方法抛出非HystrixBadRequestException异常
(2):run()方法调用超时
(3):熔断器开启拦截调用
(4):线程池/队列/信号量是否跑满
8a:没有实现getFallback的Command将直接抛出异常
8b:fallback降级逻辑调用成功直接返回
8c:降级逻辑调用失败抛出异常
9:返回执行成功结果

 

posted on   frank_cui  阅读(556)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-09-08 Tomcat - 基本知识
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

levels of contents
点击右上角即可分享
微信分享提示