hystrix隔离机制:线程池隔离和信号量隔离及配置参数 作者:马育民 • 2021-07-11 10:21 • 阅读:10513 # 介绍 Hystrix通过 **隔离** 服务之间的访问点,阻止它们之间的级联故障以及提供回退选项来实现这一点,从而提高系统的整体弹性。 hystrix提供了两种隔离策略:**线程池隔离** 和 **信号量隔离** hystrix默认采用 **线程池隔离** # 线程池隔离 不同服务通过使用不同线程池,彼此间将不受影响,达到隔离效果。 将发送请求线程 与 执行请求的线程分离,可有效防止发生级联故障。当线程池或请求队列饱和时,Hystrix将拒绝服务,使得请求线程可以快速失败,从而避免依赖问题扩散 ### 应用场景 请求并发量大,并且耗时长(请求耗时长一般是计算量大,或读数据库):采用线程隔离策略,这样,可以保证大量的容器(tomcat)线程可用,不会由于服务原因,一直处于阻塞或等待状态,快速失败返回。 ### 优点 1、用用线程池隔离可以完全隔离依赖的服务,请求线程县城可以快速放回; 2、当线程池出现问题时,线程池隔离是独立的,不会影响其他服务和接口; 3、当失败的服务再次变得可用时,线程池将清理并可立即回复,而不需要一个长时间的恢复; 4、独立的线程池提高了并发性。 ### 缺点 增加计算开销(CPU),每个命令的执行都在单独的线程完成,增加了排队、调度和上下文切换的开销 # 信号量隔离 由于线程池隔离的缺点,当依赖延迟极低的服务时,线程池隔离技术引入的开销超过了它所带来的好处。这时候可以使用信号量隔离技术来代替,通过设置信号量来限制对任何给定依赖的并发调用量。 ### 应用场景 请求并发量大,并且耗时短(请求耗时短可能是计算量小,或读缓存),采用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。 # 区别 | |线程切换 |支持异步 |支持超时 |支持熔断 |限流 |开销 | | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | |信号量| 否| 否| 否| 是| 是| 小| |线程池| 是| 是| 是| 是| 是| 大| | |线程池 |信号量 | | ------------ | ------------ | ------------ | |线程切换 |是(请求线程和执行线程不是同一个线程) |否 | |支持异步 |是 |否 | |支持超时 |是 |否 | |开销 |大(排队、调度和上下文切换) |小| |支持熔断 |是 |是 | |并发限制 |支持(线程池最大线程数) |支持(信号量上限) | 信号量 **不支持** **异步** 和 **超时**,也就是说当所请求的服务不可用时,信号量会控制超过限制的请求立即返回,但是已经持有信号量的线程只能等待服务响应或从超时中返回,即可能出现长时间等待。 # 相关参数 ### 线程池参数 - groupKey 服务名(相同服务用一个名称,如商品、用户等) - commandKey 接口(服务下面的接口,如果购买商品) - threadPoolkey 线程池的名称:配置全局唯一标识线程池的名称,相同线程池名称的线程池是同一个; - coreSize 线程池大小,这是最大的并发执行数量 - maxQueueSize 最大队列长度,设置BlockingQueue的最大长度 - queueSizeRejectionThreshold 拒绝请求,设置拒绝请求的临界值 - keepAliveTimeMinutes 线程存活时间,设置存活时间,单位分钟 ### 信号量参数 - execution.isolation.strategy 隔离策略配置项,有thread和semaphore两种 - execution.isolation.thread.timeoutInMiliseconds 超时时间,在thread模式下,达到超时时间,自动中断,在semaphore模式下,会等待执行完成后,再去判断是否超时 - execution.isolation.thread.interruptOnTimeout 是否打开超时线程中断,thread模式有效 - execution.isolation.semaphore.maxConcurrentRequests 信号量最大并发度,semaphore模式有效 - fallback.isolation.semaphore.maxConcurrentRequests fallback最大并发度,semaphore模式有效 感谢: https://blog.csdn.net/loushuiyifan/article/details/82702522 原文出处:http://malaoshi.top/show_1IX1TCOUez7N.html