Hystrix高级属性配置
在几篇的讲解和操作中,我们已经知道了服务与服务之间是通过Hystrix来实现服务熔断与降级的,Hystrix官网上除了介绍Hystrix外,还列出了一些Hystrix高级属性配置。
(https://github.com/Netflix/Hystrix/wiki/Configuration)执行隔离策略
对某种依赖的请求数量进行限制的方式,称为执行隔离。执行隔离能够服务熔断,防止服务雪崩。
执行隔离有两种类型:
线程隔离
Hystrix的默认隔离策略,系统会创建一个依赖线程池,为每个依赖请求分配一个独立的线程,而每个依赖所拥有的线程数量是有上限的。当对该依赖的调用请求数量达到上限后再有请求,则直接拒绝该请求,并对该请求做降级处理。所以对某依赖的并发量取决于为该依赖线程池所分配的线程数量。
当UserRequest获取不到线程之后就会被服务降级。
信号量隔离
对依赖的调用所使用的线程仍为请求线程,不会为依赖请求再创建新的线程。但系统会为每种依赖分配一定数量的信号量,每个依赖请求分配一个信号。当对该依赖的调用请求数量达到上限后再有请求,则直接拒绝,并对该请求做降级处理。所以对某依赖的并发量取决于为该依赖所分配的信号量数量。
在服务器少但请求并发量大的情况下不建议使用线程隔离,可能会使系统对请求的并发能力下降。线程隔离更便于控制反馈给客户端的降级时间。线程隔离的执行效率高于信号量隔离的,因为线程隔离的执行体数量是信号量隔离的2倍。
线程隔离
信号量隔离
能独立运行(线程是进程的一个执行体)
无法独立运行(信号量只是线程执行条件)
请求线程与提供者调用线程不是同一个线程
请求线程与调用线程是同一个线程
每台主机处理请求的数量是有限制的
信号量是一个计数器,是一个数值不存在上限 修改策略
修改策略一共有两种方式,一种是在代码中修改,另一种是在配置文件中修改。
代码中修改HystrixCommandProperties.Setter().withExecutionIsolationStrategy(ExecutionIsolationStrate gy.THREAD) HystrixCommandProperties.Setter().withExecutionIsolationStrategy(ExecutionIsolationStrate gy.SEMAPHORE)12345复制代码类型:[java]
配置文件中修改hystrix.command.default.execution.isolation.strategy=thread hystrix.command.default.execution.isolation.strategy=semaphore123复制代码类型:[java]
HystrixCommandProperties类的构造器中设置有这些高级属性的默认值。this.executionIsolationStrategy = getProperty(propertyPrefix, key, "execution.isolation.strategy", builder.getExecutionIsolationStrategy(), default_executionIsolationStrategy);1复制代码类型:[java]执行隔离的其他属性
执行隔离还有一些其他属性。
超时时限hystrix.command.default.execution.timeout.enabled1复制代码类型:[java]
在默认的线程执行隔离策略中,线程的执行时间可以为其设置超时时限。首先开启该超时时限,该属性默认值为true。若要关闭,则可以配置文件中设置该属性的值为false。hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds1复制代码类型:[java]
执行线程超时时限开启后还可以设置时限长度,默认值为1000毫秒。
超时中断hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds1复制代码类型:[java]
当线程执行超时时是否中断线程的执行。默认为true,即超时即中断。通过以下属性进行设置。
取消中断hystrix.command.default.execution.isolation.thread.interruptOnCancel1复制代码类型:[java]
在线程执行过程中,若请求取消了,当前执行线程是否结束呢?由该值设置。默认为false,即取消后不中断。通过以下属性进行设置。
信号量数量hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests1复制代码类型:[java]
采用信号量执行隔离策略,可以修改信号量的数量。(对某一依赖所允许的请求的最高并发量)服务降级属性
降级请求最大数量hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests1复制代码类型:[java]
仅限于信号量隔离。当信号量已用完后再有请求到达,不是所有请求都会进行降级处理,而是在该属性设置值范围内的请求才会发生降级,其它请求将直接拒绝。
服务降级开关hystrix.command.default.fallback.enabled1复制代码类型:[java]
无论是线程隔离还是信号量隔离,当请求数量到达其设置的上限后再有请求到达是否会对请求进行降级处理,取决于该属性值的设置。若该属性值设置为false,则不进行降级,而是直接拒绝请求。服务熔断属性
熔断功能开关hystrix.command.default.circuitBreaker.enabled1复制代码类型:[java]
默认值为true,设置当前应用是否开启熔断器功能。
熔断器开启阈值hystrix.command.default.circuitBreaker.requestVolumeThreshold1复制代码类型:[java]
默认值为20,当在时间窗内(10秒)收到的请求数量超过该设置的数量后,开启熔断器。(开启熔断器是指将拒绝所有请求,关闭熔断器是指将使所有请求通过)
熔断时间窗hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds1复制代码类型:[java]
默认值为5000毫秒,当熔断器开启该属性设置的时长后,会尝试关闭熔断器,恢复被熔断的服务。
熔断开启错误率hystrix.command.default.circuitBreaker.errorThresholdPercentage 12复制代码类型:[java]
当请求的错误率高于该百分比时,开启熔断器。默认值为50,即50%。
强制开启熔断器hystrix.command.default.circuitBreaker.forceOpen 12复制代码类型:[java]
默认值为false,设置熔断器无需条件开启,拒绝所有请求。
强制关闭熔断器hystrix.command.default.circuitBreaker.forceClosed 12复制代码类型:[java]
默认值为false,设置熔断器无需条件的关闭,通过所有请求。线程池相关属性
关于执行线程的线程池,可以通过官网给出的属性设置。
https://github.com/Netflix/Hystrix/wiki/Configuration#ThreadPool
开课吧广场-人才学习交流平台
647页计算机网络笔记!超详细讲解!小白必学如果你想入门IT,那么不管将来做哪个岗位,计算机网络都是必须要了解的基础知识之一!计算机网络是由一些硬件设备和相应的软件系统组成的,包括计算机网络连接通信设备传输介质网络通信软件网
生活小记3今天下午医院门诊大厅的投放屏坏了我师傅带着我去修。师傅说电路板坏了,我们改装吧!我说好呀好呀!然后我们欣然前往。就是这个坏东西拨好了铜线,安装了稳压电源,又连接了其他乱七八糟的触头
ZMI紫米桌面风扇,带给你专属小清凉炎炎夏日,虽说是坐在空调房吃着冰西瓜最爽,但这仅仅是理想,因为总有一些场景没有空调或者有空调不方便吹,这个时候一个小风扇往往能解决满头大汗的燃眉之急。比如前年,单位办公楼中央空调改
生活小记1背景景区内的三乙医院,因此医院的建筑限高,最高建筑是7楼也因此医院有些楼房较老较破本人医院小螺丝钉一枚,科室存在于老破房内,但大家生活和谐,相处愉快。据说事情发生在昨天上午大院长与
WOWSTICKPLAYMINISD锂电螺丝刀套装,就是喜欢拧着玩修东西,是一件非常好玩的事情,修好了会有很大的成就感,即便是修不好也没有什么损失(更高兴的是可以换新的啦)。而修东西,最常用的就是螺丝刀,一套好的螺丝刀会让修理的过程更顺畅。今天就
生活小记2室友买了一个新的oppo手机,她一直很喜欢。可是在昨天事情发生了变化室友小度小度!一阵安静室友小度小度!另一个室友你的语音助手功能没开吧?室友开了呀,应该没开错啊。然后继续小度小度
生活小记8如何快查核酸结果这俩天的疫情扩散的太突然啦,我这边的城市距离南京不算远,为了防控,已经开始了全民核酸行动,并且要求曾路过南京,扬州,无锡,长沙等地的居民每日核酸,由所在社区派出所通知监督,严格执行
生活小记4为什么叫她霉霉泰勒斯威夫特(TaylorSwift),1989年12月13日出生于美国宾夕法尼亚州,美国流行音乐乡村音乐创作型女歌手音乐制作人演员慈善家。就是下面这个美女!!!图侵删中国的网友给
生活小记6或许你也收到过葬礼上的寿碗?下了好久的雨,今天终于出太阳啦!但是在上午10点左右,收到了一位老前辈的母亲过世的消息。这位老前辈已经70多岁了,而他的老母亲享年94岁。大家商议后决定派代表下午去看望,没想到他们
Redis实战手册Redis面试题汇总!PDF开放下载Redis在2009年发布,开发者SalvatoreSanfilippo,本想为自己的公司开发一个用于替换MySQL的产品,没想到他把Redis开源后大受欢迎,短短几年,Redis
KTV音响设备安装连接时出现交流声的解决方法声拓电子音爵士KTV音响设备安装连接时出现交流声的解决方法声拓电子音爵士KTV包房的音响设备首先要确保能为顾客供给正常美好的音质效果。可是很多的KTV包房音响设备却因为一些装置上的失误,致使呈现