Hystrix使用总结

Hystrix使用总结

网上看了一些说hystrix的隔离及熔断机制的,感觉有些东西没说清楚,在这里自己简单整理一下。

几个名词

信号量(Semaphorest)

信号量在不同的地方表达的意思不同。在hystrix中,它表示的是在某个时间区间内的请求数,也就是说在hystrix这边,它是一个计数器的概念。

快速失败(Fail—Fast)

不使用复杂的处理在事后来检查问题,在发生错误的瞬间立刻结束工作,返回失败。
在java中,在使用foreach操作集合时,如果有执行remove等操作,会立刻抛出ConcurrentModificationException异常,这就是“快速报错”的意思。

在hystrix中,fail-fast体现在当请求的服务异常导致熔断器打开时,hystrix拒绝继续请求,快速生成失败请求fallback返回出去。

信号量与线程池隔离的区别

首先,信号量和线程池都可以对某个HystrixKey进行隔离,从隔离的粒度上来说没有区别。他们之间具体的区别可以参考官网的解释:

You can use semaphores (or counters) to limit the number of concurrent calls to any given dependency, instead of using thread pool/queue sizes. This allows Hystrix to shed load without using thread pools but it does not allow for timing out and walking away. If you trust the client and you only want load shedding, you could use this approach.

结合官方的说法来总结下,信号量模式与线程池模式之间的最主要区别在于
1. 线程池模式可以对某个HystrixyKey设置单独的超时时间
2. 线程池模式可以通过抛出InterruptedException立刻结束该请求
3. 信号量模式由于少了线程的切换,性能更好

请求缓存(Request Caching)

这个功能和mybatis的一、二级缓存很像,都是将请求结果缓存在本地内存。不同的是mybatis是请求数据库后将热点数据缓存,而hystrix是请求应用服务器后将请求结果缓存。

在分布式系统中,这个功能要慎用。接口消费者为了避免大量请求而缓存请求结果,极有可能造成过期脏数据。个人建议在生产环境不要使用该功能,如果要减少接口提供者的压力,可以使用分布式缓存代替hystrix的请求缓存。

how it words

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值