为了账号安全,请及时绑定邮箱和手机立即绑定

Hystrix semaphore和thread隔离策略的区别及配置参考

标签:
微服务

Hystrix semaphore和thread隔离策略的区别及配置参考

通用设置说明

Hystrix所有的配置都是hystrix.command.[HystrixCommandKey]开头,其中[HystrixCommandKey]是可变的,默认是default,即hystrix.command.default;另外Hystrix内置了默认参数,如果没有配置Hystrix属性,默认参数就会被设置,其优先级:

  • hystrix.command.[HystrixCommandKey].XXX

  • hystrix.command.default.XXX

  • Hystrix代码内置属性参数值

Hystrix隔离策略相关的参数

策略参数设置

execution.isolation.strategy= THREAD|SEMAPHORE

execution.isolation.thread.timeoutInMilliseconds

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds用来设置thread和semaphore两种隔离策略的超时时间,默认值是1000。

  • 建议设置这个参数,在Hystrix 1.4.0之前,semaphore-isolated隔离策略是不能超时的,从1.4.0开始semaphore-isolated也支持超时时间了。

  • 建议通过CommandKey设置不同微服务的超时时间,对于zuul而言,CommandKey就是service id:hystrix.command.[CommandKey].execution.isolation.thread.timeoutInMilliseconds

这个超时时间要根据CommandKey所对应的业务和服务器所能承受的负载来设置,要根据CommandKey业务的平均响应时间设置,一般是大于平均响应时间的20%~100%,最好是根据压力测试结果来评估,这个值设置太大,会导致线程不够用而会导致太多的任务被fallback;设置太小,一些特殊的慢业务失败率提升,甚至会造成这个业务一直无法成功,在重试机制存在的情况下,反而会加重后端服务压力。

execution.isolation.semaphore.maxConcurrentRequests

这个值并非TPSQPSRPS等都是相对值,指的是1秒时间窗口内的事务/查询/请求,semaphore.maxConcurrentRequests是一个绝对值,无时间窗口,相当于亚毫秒级的,指任意时间点允许的并发数。当请求达到或超过该设置值后,其其余就会被拒绝。默认值是100。

execution.timeout.enabled

是否开启超时,默认是true,开启。

execution.isolation.thread.interruptOnTimeout

发生超时是是否中断线程,默认是true。

execution.isolation.thread.interruptOnCancel

取消时是否中断线程,默认是false。



作者:铁汤
链接:https://www.jianshu.com/p/b8d21248c9b1

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消