SpringCloud-Hystrix配置说明

一、配置详解

1:设置隔离策略

    所有实例:hystrix.command.default.execution.isolation.strategy=

    单个实例:hystrix.command.HystrixCommandKey.execution.isolation.strategy=

    THREAD(默认):在固定大小线程池中,以单独线程执行,并发请求数受限于线程池大小

    SEMAPHORE:在调用线程中执行,通过信号量来限制并发量

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

2:设置调用者等待命令执行的超时限制,超过此时间,HystrixCommand被标记为TIMEOUT,并执行回退逻辑

    execution.isolation.thread.timeoutInMilliseconds=1000(默认1000毫秒)

3:设置执行是否有超时限制

    execution.isolation.thread.interruptOnTimeout=true(默认)

4:设置HystrixCommand.run()的执行是否在超时发生时被中断

    execution.isolation.thread.interruptOnTimeout=true(默认)

5:设置HystrixCommand.run()的执行在取消动作发生时候可以响应中断

    execution.isolation.thread.interruptOnCancel=false(默认)

6:设置隔离策略为SEMAPHORE时允许的最大请求数

    execution.isolation.semaphore.maxConcurrentRequests=10(默认)

    如果达到最大并发数时,后续请求会被拒绝。信号量应该是容器(比如Tomcat)线程池一小部分,不能等于或者略小于容器线程池大小,否则起不到保护作用。

7:设置调用线程产生的HystrixCommand.getFallback()方法的允许最大请求数目

    fallback.isolation.semaphore.maxConcurrentRequests=10(默认)

    如果达到最大并发数目,后续请求将会被拒绝,如果没有实现回退,则抛出异常。

8:该属性决定当故障或者拒绝发生时,一个调用将会去尝试HystrixCommand.getFallback()

    fallback.enabled=true(默认)

9:设置断路器是否起作用

    circuitBreaker.enabled=true(默认)

10:该属性设置滚动窗口中将使断路器跳闸的最小请求数量

    circuitBreaker.requestVolumeThreshold=20(默认)

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

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

    circuitBreaker.errorThresholdPercentage=50(默认)

12:如果设置true,则强制使断路器跳闸,则会拒绝所有的请求.此值会覆盖circuitBreaker.forceClosed的值

    circuitBreaker.forceOpen=false(默认)

13:如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,无论是否失败的次数达到circuitBreaker.errorThresholdPercentage值

    circuitBreaker.forceClosed=false(默认)

14:设置在回路被打开,拒绝请求到再次尝试请求并决定回路是否继续打开的时间

    circuitBreaker.sleepWindowInMilliseconds=5000(默认值5000毫秒)

15:设置统计滚动窗口的时间长度

    metrics.rollingStats.timeInMilliseconds=10000(默认)

16:设置统计滚动窗口的桶数量

    metrics.rollingStats.numBuckets=10(默认)

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

    metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0 如:10000/10、10000/20是正确的配置,但是10000/7错误的

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

17:设置执行延迟是否被跟踪,并且被计算在失败百分比中。如果设置为false,则所有的统计数据返回-1

    metrics.rollingPercentile.enabled=true(默认)

18:此属性设置统计滚动百分比窗口的持续时间

    metrics.rollingPercentile.timeInMilliseconds=60000(默认)

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

    metrics.rollingPercentile.numBuckets=6(默认)

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

    metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0 如: 60000/6、60000/60是正确的配置,但是10000/7错误的,在高并发的环境里,每个桶的时间长度建议大于1000ms

20:采样时间间隔

    metrics.healthSnapshot.intervalInMilliseconds=500(默认)

21:是否开启请求缓存功能

    requestCache.enabled =true(默认)

22:表示是否开启日志,打印执行HystrixCommand的情况和事件

    requestLog.enabled=true(默认)

23:设置同时批量执行的请求的最大数量

    maxRequestsInBatch=Integer.MAX_VALUE(默认)

24:批量执行创建多久之后,再触发真正的请求

    timerDelayInMilliseconds=10(默认)

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

    requestCache.enabled=true(默认)

26:设置线程池的core的大小

    coreSize=10(默认)

27:设置最大的线程池的大小,只有设置allowMaximumSizeToDivergeFromCoreSize时,此值才起作用

    maximumSize=10(默认)

28:设置最大的BlockingQueue队列的值

    maxQueueSize=-1(默认)

    如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列

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

    queueSizeRejectionThreshold=5(默认)如果设置-1,则属性不启作用

30:设置线程多久没有服务后,需要释放(maximumSize-coreSize )个线程

    keepAliveTimeMinutes=1(默认)

31:设置allowMaximumSizeToDivergeFromCoreSize值为true时,maximumSize才有作用 
    allowMaximumSizeToDivergeFromCoreSize=false(默认)

32:设置滚动窗口的时间

    metrics.rollingStats.timeInMilliseconds=10000(默认)

33:设置滚动静态窗口分成的桶的数量

    metrics.rollingStats.numBuckets=10(默认)

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

    metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0
    建议每个桶的时间长度大于100ms

二、配置案例

1:THREAD模式

hystrix:
  threadpool:
    default:
      coreSize: 200 ##并发执行的最大线程数,默认10
      maxQueueSize: 200 ##BlockingQueue的最大队列数
      queueSizeRejectionThreshold: 50 
      ##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: THREAD
          semaphore:
            maxConcurrentRequests: 1000
          thread:
            timeoutInMilliseconds: 30000
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 5000

2:SEMAPHORE模式

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 60000
          semaphore:
            maxConcurrentRequests: 1000
  shareSecurityContext: true

 

上一篇:kubernetes之-metrics-server


下一篇:kubernetes监控