资源隔离的资源指的是上游服务所依赖的下游服务资源。 hystrix资源隔离模式有两种:信号量隔离、线程池隔离(默认)。注:sentinal(默认信号量隔离),resilience4j(默认信号量隔离)
一、信号量隔离:
信号量模式从始至终都只有请求线程自身,是同步调用模式,不支持超时调用,不支持直接熔断,由于没有线程的切换,开销非常小。
二、线程池隔离(默认):
线程池模式可以支持异步调用,支持超时调用,支持直接熔断,存在线程切换,开销大。
三、选型:
上图可以看出两者最大区别在于:线程池开销大,在高并发下可能线程数不够用;优点是线程池是异步,对于网络访问请求,若发生超时,可以避免调用线程阻塞住。
- 线程隔离策略:开销比较大的时候,或者是请求比较耗时的时候,并发低时,我们最好是使用线程隔离策略
- 信号量隔离策略:超大并发量的场景下,每个服务实例每秒都几百的QPS场景用信号量;另外请求缓存的这些服务的时候,我们可以使用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。