Spring cloud之Hystrix 配置

目录

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


1、hystrix可配置属性类型

Hystrix可以配置属性的有以下类型:

  • Execution:控制HystrixCommand.run() 的如何执行;
  • Fallback: 控制HystrixCommand.getFallback() 如何执行;
  • Circuit Breaker: 控制断路器的行为;
  • Metrics: 捕获HystrixCommandHystrixObservableCommand执行信息相关的配置属性;
  • Request Context:设置请求上下文的属性;
  • Collapser Properties:设置请求合并的属性;
  • Thread Pool Properties:设置线程池的属性。

2、Hystrix参数的覆盖优先级

每个Hystrix参数都有4个地方可以配置,优先级从低到高如下,如果每个地方都配置相同的属性,则优先级高的值会覆盖优先级低的值

  • 1 内置全局默认值:写死在代码里的值。
  • 2 动态全局默认属性:通过属性文件配置全局的值。
  • 3 内置实例默认值:写死在代码里的实例的值。
  • 4 动态配置实例属性:通过属性文件配置特定实例的值。

 3、属性配置参数

   3.1、Execution

       以下属性控制HystrixCommand.run()如何执行。

    3.1.1、execution.isolation.strategy

        表示HystrixCommand.run()的执行时的隔离策略,有以下两种策略

  • THREAD: 在单独的线程上执行,并发请求受线程池中的线程数限制。
  • SEMAPHORE: 在调用线程上执行,并发请求量受信号量计数限制。

        在默认情况下,推荐HystrixCommands 使用 thread 隔离策略,HystrixObservableCommand 使用 semaphore 隔离策略。 
        只有在高并发(单个实例每秒达到几百个调用)的调用时,才需要修改HystrixCommands 的隔离策略为semaphore 。semaphore 隔离策略通常只用于非网络调用。

默认值:THREAD,

默认值:

        默认使用THREAD模式,以下几种场景可以使用SEMAPHORE模式:

  1.  想控制并发度。
  2. 外部的方法已经做了线程隔离。
  3. 调用的是本地方法或者可靠度非常高、耗时特别小的方法(如medis)。

   3.1.2、execution.isolation.thread.timeoutInMilliseconds

设置调用者执行的超时时间(单位毫秒)。

默认值:1000

在THREAD模式下,达到超时时间,可以中断。

在SEMAPHORE模式下,会等待执行完成后,再去判断是否超时。
设置标准:
有retry,99meantime+avg meantime
没有retry,99.5meantime

   3.1.3、execution.timeout.enabled

表示是否开启超时设置。

默认值:true

   3.1.4、execution.isolation.thread.interruptOnTimeout

    在发生超时时,是否应中断HystrixCommand.run()执行。

    默认值:true (THREAD模式有效)

  3.1.5、execution.isolation.thread.interruptOnCancel

    在取消任务执行时,是否中断HystrixCommand.run() 的执行。

   默认值:false (THREAD模式有效)

   3.1.6、execution.isolation.semaphore.maxConcurrentRequests

当HystrixCommand.run()使用SEMAPHORE的隔离策略时,设置最大的并发量。

   默认值:10

3.2、Fallback

以下属性控制HystrixCommand.getFallback() 如何执行。这些属性对隔离策略THREAD 和SEMAPHORE都起作用. 

   3.2.1、fallback.isolation.semaphore.maxConcurrentRequests

设置从调用线程允许HystrixCommand.getFallback()方法允许的最大并发请求数 。
如果达到最大的并发量,则接下来的请求会被拒绝并且抛出异常.

   默认值:10 (SEMAPHORE模式有效)

  3.2.2、 fallback.enabled 

     确定在发生失败或拒绝时是否尝试调用HystrixCommand.getFallback()。

  默认值:true

3.3、Circuit Breaker

断路器属性。控制HystrixCircuitBreaker(断路器)的行为。

   3.3.1、circuitBreaker.enabled

        是否开启断路器功能。

        默认值:true

  3.3.2、circuitBreaker.requestVolumeThreshold

     设置滚动窗口中将使断路器跳闸的最小请求数量。

     如果此属性值为20,则在窗口时间内(如10s内),如果只收到19个请求且都失败了,则断路器也不会开启。

     默认值:20

   3.3.3、circuitBreaker.sleepWindowInMilliseconds

    断路器跳闸后,在此值的时间内,hystrix会拒绝新的请求,只有过了这个时间,断路器才会打开闸门。即:熔断多少秒后去尝试请求。

    默认值:5000

  3.3.4、circuitBreaker.errorThresholdPercentage

    设置失败百分比的阈值。如果失败比率超过这个值,则断路器跳闸并且进入fallback逻辑。

    即:失败率达到多少百分比后熔断。主要根据依赖重要性进行调整。

    默认值:50

  3.3.5、circuitBreaker.forceOpen

    如果设置true,强制断路器进入打开(跳闸)状态,此时它将拒绝所有请求。

    此属性优先于circuitBreaker.forceClosed

    默认值:false

  3.3.6、circuitBreaker.forceClosed

    如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,而不考虑误差百分比(即不考虑circuitBreaker.errorThresholdPercentage值)。

   默认值:false

3.4、Metrics

  捕获HystrixCommand 和 HystrixObservableCommand 执行信息相关的配置属性。

  3.4.1、metrics.rollingStats.timeInMilliseconds

    设置统计滚动窗口的时间长度(以毫秒为单位)。对于断路器的使用和发布Hystrix保持多长时间的指标。

    默认值: 10000

   如果此值为10s,将窗口分成10个桶,每个桶表示1s时间,则统计信息如下图: 

这里写图片描述

   3.4.2、metrics.rollingStats.numBuckets

 设置滚动窗口(rollingstatistical)划分的桶数量。

  在高并发的环境里,每个桶的时间长度建议大于100ms。

   默认值:10

  注意:以下配置必须成立,否则会抛出异常。

metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0

  如:10000/10、10000/20是正确的配置, 但10000/7 是错误的

  3.4.3、metrics.rollingPercentile.enabled

   设置 是否应以百分位数跟踪和计算执行延迟。 如果禁用它们,则所有摘要统计信息(平均值,百分位数)都将返回-1。

  默认值: true

  3.4.4、metrics.rollingPercentile.timeInMilliseconds

  设置滚动窗口的持续时间,其中保留执行时间以允许百分位数计算,以毫秒为单位。

   默认值:60000

  3.4.5、metrics.rollingPercentile.numBuckets

  设置统计滚动百分比窗口的桶数量。

  在高并发的环境里,每个桶的时间长度建议大于1000ms。

  默认值:6

   注意:以下配置必须成立,否则会抛出异常。

metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0

如: 60000/6、60000/60是正确的配置,但10000/7 是错误的。

  3.4.6、metrics.rollingPercentile.bucketSize

    设置每个存储桶保留的最大执行次数。如果在这段时间内发生更多的执行,它们将绕回并开始在桶的开始处重写。

   默认值:100

  3.4.7、metrics.healthSnapshot.intervalInMilliseconds

设置在允许计算成功和错误百分比并不影响断路器状态的健康快照之间等待的时间(以毫秒为单位)。

   默认值:500

3.5、Request Context

此属性控制HystrixCommand使用到的Hystrix的上下文。涉及HystrixCommand使用的HystrixRequestContext功能。

  3.5.1、requestCache.enabled

是否开启请求缓存功能。

HystrixCommand.getCacheKey()是否应与HystrixRequestCache一起使用,以通过请求范围的缓存提供重复数据删除功能。

默认值:true

  3.5.2、requestLog.enabled

是否开启日志,打印执行HystrixCommand的情况和事件。

即:HystrixCommand执行和事件是否应记录到HystrixRequestLog。

默认值:true

3.6、Collapser Properties

设置请求合并的属性。

 3.6.1、maxRequestsInBatch

设置在触发批处理执行之前批处理中允许的最大请求数。

默认值:Integer.MAX_VALUE

 3.6.2、timerDelayInMilliseconds

批量执行创建多久之后,再触发真正的请求。单位:毫秒

默认值:10

 3.6.3、requestCache.enabled

是否对HystrixCollapser.execute() 和 HystrixCollapser.queue()开启请求缓存。

默认值:true

3.7、ThreadPool Properties

设置Hystrix Commands的线程池行为,大部分情况线程数量是10。

线程池数量的计算公式如下:

最高峰时每秒的请求数量 × 99%命令执行时间 + 喘息空间

设置线程池数量的主要原则是保持线程池越小越好,因为它是减轻负载并防止资源在延迟发生时被阻塞的主要工具。

 3.7.1、coreSize

设置线程池的core的大小

默认值:10

设置标准:qps*99meantime+breathing room

 3.7.2、maximumSize

设置最大的线程池的大小,这是在不开始拒绝HystrixCommands的情况下可以支持的最大并发数。 请注意,此设置仅在您还设置allowMaximumSizeToDivergeFromCoreSize时才会生效。

默认值:10

 3.7.3、maxQueueSize

 设置最大的BlockingQueue队列的值。如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列。

默认值:-1

 3.7.4、queueSizeRejectionThreshold

设置队列大小拒绝阈值 。

因为maxQueueSize值不能被动态修改,所有通过设置此值可以实现动态修改等待队列长度。即等待的队列的数量大于queueSizeRejectionThreshold时(但是没有达到maxQueueSize值),则开始拒绝后续的请求进入队列。

如果设置-1,则属性不启作用。

默认值:5

 3.7.5、keepAliveTimeMinutes

设置线程多久没有服务 后释放,以分钟为单位。需要释放(maximumSize-coreSize )个线程。

默认值:1

 3.7.6、allowMaximumSizeToDivergeFromCoreSize

设置allowMaximumSizeToDivergeFromCoreSize值为true时,maximumSize才有作用。

maximumSize值可以等于或高于coreSize。 设置coreSize <maximumSize会创建一个线程池,该线程池可以支持maximumSize并发,但在相对不活动期间将向系统返回线程。 (以keepAliveTimeInMinutes为准)。

默认值:false

 3.7.7、metrics.rollingStats.timeInMilliseconds

设置滚动窗口(statistical rolling)的持续时间(以毫秒为单位)。 这是为线程池保留多长时间。

默认值:10000

 3.8.8、metrics.rollingStats.numBuckets

设置滚动统计窗口划分的桶数。建议每个桶的时间长度大于100ms。

默认值:10 

配置的值必须满足如下条件:

metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0

猜你喜欢

转载自blog.csdn.net/weixin_40482816/article/details/119215962
今日推荐