Hystrix信号量模式支持超时时间吗

栏目: 后端 · 发布时间: 5年前

内容简介:前段时间我司内部晋升答辩时,有位同事的晋升PPT中说到它采用了“Hystrix信号量 + RPC CallBack + CompletableFuture”进行了性能优化,使用Hystrix主要是使用它的超时、降级、熔断等功能。不少评委提出了质疑,因为他们认为Hystrix信号量模式是不支持超时的。Talk is cheap,Show me your code信号量模式

背景

前段时间我司内部晋升答辩时,有位同事的晋升PPT中说到它采用了“Hystrix信号量 + RPC CallBack + CompletableFuture”进行了性能优化,使用Hystrix主要是使用它的超时、降级、熔断等功能。不少评委提出了质疑,因为他们认为Hystrix信号量模式是不支持超时的。

Talk is cheap,Show me your code

信号量模式

Hystrix信号量模式支持超时时间吗

从实验中我们可以看出,Hystrix的信号量模式确实是支持超时的,但是结论就真的这么简单吗?

对于线程池实现超时比较容易理解,future.get(timeout)就可以了,但是对于信号量该如何实现以及理解呢。

我们接下来继续实验。

Hystrix信号量模式支持超时时间吗

从输出的日志顺序可以看出来,明明是run执行完成之后,才在main方法中接收到的TimeoutException。 也就是说 Hystrix任务会在 main线程中会一直执行Hystrix任务,直到任务执行结束,如果发现执行时间超过了Hytrix设置的超时时间,main线程才会接收到异常。并不是在超时时间内结果Hystrix任务,释放资源。

那么如果实现了fallback又会是什么样子的呢?

Hystrix信号量模式支持超时时间吗

Hystrix信号量模式支持超时时间吗

从日志中可以看出,fallback其实任务在到达超时时间(也就是配置的150ms)时,由另外的线程去执行的fallback内容。但是main线程也只能在Hystrix run方法执行完成之后才能获取到fallback中的返回值。

上面的执行路径大概如下:

Hystrix信号量模式支持超时时间吗

线程池模式

Hystrix信号量模式支持超时时间吗

Hystrix信号量模式支持超时时间吗

从日志可以看出,对于线程池模式,在到达timeout时候,会有HystrixTimer线程会把运行任务的Hystrix线程设置为中断,然后使用 HystrixTimer线程去之心fallback。

执行路径大概如下:

Hystrix信号量模式支持超时时间吗

那么如果对于运行run方法的代码逻辑如果不支持中断又会怎么样呢?

Hystrix信号量模式支持超时时间吗

Hystrix信号量模式支持超时时间吗

虽然运行run方法的线程被设置了中断标志,但是因为run方法本身不支持中断逻辑,所以该线程会一直运行直到任务执行完毕。

为什么很多人认为信号量不支持超时

我想很多人认为信号量不支持超时,应该是来自于Hystrix的官网上诱导,官方上明确提到信号量模式是不支持。

Hystrix信号量模式支持超时时间吗

看了一下官网上最后一次更新都是两年前了,应该是没有及时更新wiki才会导致很多人出现这个误解。

在早期的时候Hystrix信号量确实是不支持超时时间的,当时仅仅线程池支持,设置超时时间的参数为withExecutionIsolationThreadTimeoutInMilliseconds,但是在1.4.0之后的版本,信号量也就支持了超时时间,此时参数统一修改成了withExecutionIsolationThreadTimeoutInMilliseconds。

Hystrix信号量模式支持超时时间吗

总结

从上述分析我们可以得出Hystrix的超时机制:

Hystrix在任务启动时会启动另外一个线程HystrixTime去监测任务。如果在TimeOut时间内,任务未完成,对于线程池模式,会把执行任务的线程设置为中断;对于信号量模式,Hystrix不会对执行任务的线程做任何操作。然后再使用HystrixTime线程去执行fallback逻辑。

所以大家一定要明白: 对于信号量超时模式,如果发生超时,Hystrix任务并不会结束,任务结束还是得依赖于run方法执行完毕。

对于线程池超时模式,如果发生超时,Hystrix任务可以结束,不依赖于run方法执行情况,但是run方法可能还会在执行,这依赖与run方法中的代码逻辑。

由此带来哪些问题呢?

  1. 在run方法中加入监控,看到的执行时间可能远大于timeout

  2. 配置的线程数能支持的最小QPS不是简单的”线程数 /  timeout“。

  3. 对于信号量模式,整体串形链路的的最大时间,不是简单的Hystrix1的timeout +  Hystrix2的timeout + ... +  HystrixN的timeout。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

家事的撫慰(下冊)

家事的撫慰(下冊)

Cheryl Mendelson / 甘錫安 / 大家出版社 / 2014-1-28 / NT$520

家事界暢銷參考書籍 各大媒體一致盛讚 亞馬遜讀者四星半高度評鑑 誠品、博客來、香港誠品 三選書 家務界經典暢銷書│各大媒體一致盛讚│讀者四星半高度評鑑 「這個世代最重要的家事著作!」──《大西洋月刊》 恢復家務打理者應有的地位,賦予應有的尊嚴和價值。 以生理的勞動、心力的投入,以及正確的持家知識,換得情感上的溫暖與安全。 .家裡空氣有異味,用香味來......一起来看看 《家事的撫慰(下冊)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试