hystrix线程池资源隔离的理解

1 篇文章 0 订阅
1 篇文章 0 订阅

hystrix作为一款熔断、降级、资源隔离的优秀组件,广泛流行。

hystrix如何进行隔离,有线程池隔离和信号量两种方式。

信号量隔离相对来说容易理解,他就是一个计数器,显示服务的请求数量,起到了限流的作用。

如何理解线程池隔离,我刚接触hystrix的时候就走向了误区。

这张图是我们在网上常常看到的,描述hystrix的原理的图。

但是,其实这张图并不严谨,会把我们带到一个误区。

看到这张图以及网上的讲解,我一开始认为,hystrix会在服务消费方,也就是调用者微服务中,将上游来的请求封装到一个单独的线程池中,跟tomcat其他的线程池隔离,本次请求量就算再大也只是会撑满自己的线程池,不会影响tomcat的其他服务。这样就保护了这个微服务的其他接口。卧槽,这得多流弊。

但是,实际上是我想多了,仔细想想也是,外部流量进来,首先接收流量的就是tomcat的threadpool,轮到hystrix干活,还要经过九曲十八弯呢。

那hystrix的线程池隔离是什么意思呢,实际上,是接口的请求在来到hystrix之前还要经过controller、service等,真正被hystrix接收到后,hystrix才会创建线程池,把请求放到新的线程中,请求下游的服务。这个过程中,hystrix就可以控制等待超时、失败请求统计等操作。所以这个线程池的大小就决定了对下游服务的并发请求量,实际上也是在这里起到了对下游服务的一个保护。重点就是对下游服务的保护。对自己所在的服务是否有保护呢,如果我们的hystrix超时时间(execution.isolation.thread.timeoutInMilliseconds)设置的非常长,那么当下游服务响应慢或无响应时,hystrix所在的服务也会长时间挂起,这样tomcat的线程池也就很快会耗尽,失去保护作用。所以我们的hystrix超时时间,失败统计次数,失败比例等参数设置的合理才能起到对自己的保护作用,也就是对下游响应慢或无响应的服务,能够快速熔断,进行降级,返回降级结果,释放宝贵的tomcat线程资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值