目录
1、hystrix可配置属性类型
2、Hystrix参数的覆盖优先级
3、属性配置参数
3.1、Execution
3.1.1、execution.isolation.strategy
3.1.2、execution.isolation.thread.timeoutInMilliseconds
3.1.3、execution.timeout.enabled
3.1.4、execution.isolation.thread.interruptOnTimeout
3.1.5、execution.isolation.thread.interruptOnCancel
3.1.6、execution.isolation.semaphore.maxConcurrentRequests
3.2、Fallback
3.2.1、fallback.isolation.semaphore.maxConcurrentRequests
3.2.2、 fallback.enabled
3.3、Circuit Breaker
3.3.1、circuitBreaker.enabled
3.3.2、circuitBreaker.requestVolumeThreshold
3.3.3、circuitBreaker.sleepWindowInMilliseconds
3.3.4、circuitBreaker.errorThresholdPercentage
3.3.5、circuitBreaker.forceOpen
3.3.6、circuitBreaker.forceClosed
3.4、Metrics
3.4.1、metrics.rollingStats.timeInMilliseconds
3.4.2、metrics.rollingStats.numBuckets
3.4.3、metrics.rollingPercentile.enabled
3.4.4、metrics.rollingPercentile.timeInMilliseconds
3.4.5、metrics.rollingPercentile.numBuckets
3.4.6、metrics.rollingPercentile.bucketSize
3.4.7、metrics.healthSnapshot.intervalInMilliseconds
3.5、Request Context
3.5.1、requestCache.enabled
3.5.2、requestLog.enabled
3.6、Collapser Properties
3.6.1、maxRequestsInBatch
3.6.2、timerDelayInMilliseconds
3.6.3、requestCache.enabled
3.7、ThreadPool Properties
3.7.1、coreSize
3.7.2、maximumSize
3.7.3、maxQueueSize
3.7.4、queueSizeRejectionThreshold
3.7.5、keepAliveTimeMinutes
3.7.6、allowMaximumSizeToDivergeFromCoreSize
3.7.7、metrics.rollingStats.timeInMilliseconds
3.8.8、metrics.rollingStats.numBuckets
Hystrix可以配置属性的有以下类型:
每个Hystrix参数都有4个地方可以配置,优先级从低到高如下,如果每个地方都配置相同的属性,则优先级高的值会覆盖优先级低的值
以下属性控制HystrixCommand.run()如何执行。
表示HystrixCommand.run()的执行时的隔离策略,有以下两种策略
在默认情况下,推荐HystrixCommands 使用 thread 隔离策略,HystrixObservableCommand 使用 semaphore 隔离策略。
只有在高并发(单个实例每秒达到几百个调用)的调用时,才需要修改HystrixCommands 的隔离策略为semaphore 。semaphore 隔离策略通常只用于非网络调用。
默认值:THREAD,
默认值:
默认使用THREAD模式,以下几种场景可以使用SEMAPHORE模式:
设置调用者执行的超时时间(单位毫秒)。
默认值:1000
在THREAD模式下,达到超时时间,可以中断。
在SEMAPHORE模式下,会等待执行完成后,再去判断是否超时。
设置标准:
有retry,99meantime+avg meantime
没有retry,99.5meantime
表示是否开启超时设置。
默认值:true
在发生超时时,是否应中断HystrixCommand.run()执行。
默认值:true (THREAD模式有效)
在取消任务执行时,是否中断HystrixCommand.run() 的执行。
默认值:false (THREAD模式有效)
当HystrixCommand.run()使用SEMAPHORE的隔离策略时,设置最大的并发量。
默认值:10
以下属性控制HystrixCommand.getFallback() 如何执行。这些属性对隔离策略THREAD 和SEMAPHORE都起作用.
设置从调用线程允许HystrixCommand.getFallback()方法允许的最大并发请求数 。
如果达到最大的并发量,则接下来的请求会被拒绝并且抛出异常.
默认值:10 (SEMAPHORE模式有效)
确定在发生失败或拒绝时是否尝试调用HystrixCommand.getFallback()。
默认值:true
断路器属性。控制HystrixCircuitBreaker(断路器)的行为。
是否开启断路器功能。
默认值:true
设置滚动窗口中将使断路器跳闸的最小请求数量。
如果此属性值为20,则在窗口时间内(如10s内),如果只收到19个请求且都失败了,则断路器也不会开启。
默认值:20
断路器跳闸后,在此值的时间内,hystrix会拒绝新的请求,只有过了这个时间,断路器才会打开闸门。即:熔断多少秒后去尝试请求。
默认值:5000
设置失败百分比的阈值。如果失败比率超过这个值,则断路器跳闸并且进入fallback逻辑。
即:失败率达到多少百分比后熔断。主要根据依赖重要性进行调整。
默认值:50
如果设置true,强制断路器进入打开(跳闸)状态,此时它将拒绝所有请求。
此属性优先于circuitBreaker.forceClosed
默认值:false
如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,而不考虑误差百分比(即不考虑circuitBreaker.errorThresholdPercentage值)。
默认值:false
捕获HystrixCommand 和 HystrixObservableCommand 执行信息相关的配置属性。
设置统计滚动窗口的时间长度(以毫秒为单位)。对于断路器的使用和发布Hystrix保持多长时间的指标。
默认值: 10000
如果此值为10s,将窗口分成10个桶,每个桶表示1s时间,则统计信息如下图:
设置滚动窗口(rollingstatistical)划分的桶数量。
在高并发的环境里,每个桶的时间长度建议大于100ms。
默认值:10
注意:以下配置必须成立,否则会抛出异常。
metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0
如:10000/10、10000/20是正确的配置, 但10000/7 是错误的
设置 是否应以百分位数跟踪和计算执行延迟。 如果禁用它们,则所有摘要统计信息(平均值,百分位数)都将返回-1。
默认值: true
设置滚动窗口的持续时间,其中保留执行时间以允许百分位数计算,以毫秒为单位。
默认值:60000
设置统计滚动百分比窗口的桶数量。
在高并发的环境里,每个桶的时间长度建议大于1000ms。
默认值:6
注意:以下配置必须成立,否则会抛出异常。
metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0
如: 60000/6、60000/60是正确的配置,但10000/7 是错误的。
设置每个存储桶保留的最大执行次数。如果在这段时间内发生更多的执行,它们将绕回并开始在桶的开始处重写。
默认值:100
设置在允许计算成功和错误百分比并不影响断路器状态的健康快照之间等待的时间(以毫秒为单位)。
默认值:500
此属性控制HystrixCommand使用到的Hystrix的上下文。涉及HystrixCommand使用的HystrixRequestContext功能。
是否开启请求缓存功能。
HystrixCommand.getCacheKey()是否应与HystrixRequestCache一起使用,以通过请求范围的缓存提供重复数据删除功能。
默认值:true
是否开启日志,打印执行HystrixCommand的情况和事件。
即:HystrixCommand执行和事件是否应记录到HystrixRequestLog。
默认值:true
设置请求合并的属性。
设置在触发批处理执行之前批处理中允许的最大请求数。
默认值:Integer.MAX_VALUE
批量执行创建多久之后,再触发真正的请求。单位:毫秒
默认值:10
是否对HystrixCollapser.execute() 和 HystrixCollapser.queue()开启请求缓存。
默认值:true
设置Hystrix Commands的线程池行为,大部分情况线程数量是10。
线程池数量的计算公式如下:
最高峰时每秒的请求数量 × 99%命令执行时间 + 喘息空间
设置线程池数量的主要原则是保持线程池越小越好,因为它是减轻负载并防止资源在延迟发生时被阻塞的主要工具。
设置线程池的core的大小
默认值:10
设置标准:qps*99meantime+breathing room
设置最大的线程池的大小,这是在不开始拒绝HystrixCommands的情况下可以支持的最大并发数。 请注意,此设置仅在您还设置allowMaximumSizeToDivergeFromCoreSize时才会生效。
默认值:10
设置最大的BlockingQueue队列的值。如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列。
默认值:-1
设置队列大小拒绝阈值 。
因为maxQueueSize值不能被动态修改,所有通过设置此值可以实现动态修改等待队列长度。即等待的队列的数量大于queueSizeRejectionThreshold时(但是没有达到maxQueueSize值),则开始拒绝后续的请求进入队列。
如果设置-1,则属性不启作用。
默认值:5
设置线程多久没有服务 后释放,以分钟为单位。需要释放(maximumSize-coreSize )个线程。
默认值:1
设置allowMaximumSizeToDivergeFromCoreSize值为true时,maximumSize才有作用。
maximumSize值可以等于或高于coreSize。 设置coreSize 默认值:false 设置滚动窗口(statistical rolling)的持续时间(以毫秒为单位)。 这是为线程池保留多长时间。 默认值:10000 设置滚动统计窗口划分的桶数。建议每个桶的时间长度大于100ms。 默认值:10 配置的值必须满足如下条件: 3.7.7、metrics.rollingStats.timeInMilliseconds
3.8.8、metrics.rollingStats.numBuckets
metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0