HystrixCommandProperties的熔断参数配置

下面是HystrixCommandProperties的熔断参数配置。
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withCircuitBreakerEnabled(true)//默认为true
.withCircuitBreakerForceClosed(false)//默认为false
.withCircuitBreakerForceOpen(false)//默认为false
.withCircuitBreakerErrorThresholdPercentage(50)//默认为50%
.withCircuitBreakerRequestVolumeThreshold(20) //默认为20
.withCircuitBreakerSleepWindowInMilliseconds(5000)//默认为为5s
具体配置含义如下所示。
withCircuitBreakerEnabled:是否开启熔断机制,默认为true。
withCircuitBreakerForceClosed:是否强制关闭熔断开关,如果强制关闭了熔断开关,则请求不会被降级,一些特殊场景可以动态配置该开关,默认为false。
withCircuitBreakerForceOpen:是否强制打开熔断开关,如果强制打开可熔断开关,则请求强制降级调用getFallback处理,可以通过动态配置来打开该开关实现一些特殊需求,默认为false。
withCircuitBreakerErrorThresholdPercentage:如果在一个采样时间窗口内,失败率超过该配置,则自动打开熔断开关实现降级处理,即快速失败。默认配置下采样周期为10s,失败率为50%。
withCircuitBreakerRequestVolumeThreshold:在熔断开关闭合情况下,在进行失败率判断之前,一个采样周期内必须进行至少N个请求才能进行采样统计,目的是有足够的采样使得失败率计算正确,默认为20。
withCircuitBreakerSleepWindowInMilliseconds:熔断后的重试时间窗口,且在该时间窗口内只允许一次重试。即在熔断开关打开后,在该时间窗口允许有一次重试,如果重试成功,则将重置Health采样统计并闭合熔断开关实现快速恢复,否则熔断开关还是打开状态,执行快速失败。
熔断后将降级调用getFallback进行处理(fallbackEnabled=true),通过Command如下方法可以判断是否熔断了。
isCircuitBreakerOpen:熔断开关是否打开了,通过“circuitBreakerForceOpen().get()|| (!circuitBreakerForceClosed().get() && circuitBreaker.isOpen())”判断。
isResponseShortCircuited:isCircuitBreakerOpen=true,且调用getFallback时返回true。
3 采样统计
Hystrix在内存中存储采样数据,支持如下两种采样。
BucketedCounterStream:计数统计,比如记录一定时间窗口内的失败、超时、线程池拒绝、信号量拒绝数量,记录N组。写入数据时写到第N组,统计时使用前N-1组数据,因为第N个刚开始统计时是随时变化的。然后基于时间滚转采样分组即可。

采样统计滚转时间窗口为10s,每秒1个分组(桶),即每秒采样一次,每个分组记录着当前桶的成功、失败、超时、线程拒绝统计数量。
RollingConcurrencyStream:最大并发数统计,如Command/ThreadPool的最大并发数。
RollingDistributionStream:延时百分比统计,同HystrixRollingNumber类似,差别在于其是百分位数的统计。比如每组记录P(比如100)个数值,统计时使用前N-1组数据,将分组内数据按从小到大排序,然后累加,处于第p%位置的数值就是p百分位数,通过它可以实现P50、P99、P999,Hystrix用来统计时延的分布情况。最新版本Hystrix使用HdrHistogram库来实现统计。
3.1 Command、ThreadPool计数/最大并发采样统计
HystrixThreadPoolProperties.Setter threadPoolProperties = HystrixThreadPoolProperties.Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(1000)
.withMetricsRollingStatisticalWindowBuckets(10);
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(10000)
.withMetricsRollingStatisticalWindowBuckets(10);
withMetricsRollingStatisticalWindowInMilliseconds:配置采样统计滚转时间窗口,默认为10s。
withMetricsRollingStatisticalWindowBuckets:配置采用统计滚转时间窗口内的桶的总数量,默认为10,比如时间窗口为10000,桶数量为10,则采样统计间隔为每秒一个桶统计。
3.2 Command健康度采样统计
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(10000)
.withMetricsHealthSnapshotIntervalInMilliseconds(500);
withMetricsRollingStatisticalWindowInMilliseconds:同上所示。
withMetricsHealthSnapshotIntervalInMilliseconds:记录健康采用统计的快照频率,默认为500ms,即500ms一个采样统计间隔,那么桶的数量为10000/500=20个。
该统计在熔断机制中使用,如果计算熔断的频率非常高,则要控制好采样的频率,如果太频繁,那么将造成CPU计算密集,如10ms一个周期,因为会对前N-1个桶进行统计,计算累加时会耗费CPU。所以选择Hystrix要注意此处的性能消耗和调优。如果此处是性能瓶颈,则可以废掉统计,或者按照Hystrix思路实现自己的降级组件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章