• Hystrix的原理与架构


     一、定义

    1. 一个开源的延迟与容错框架,用于隔离访问远程服务、第三记库,防止出现级联失败
    2. 当某个或某些服务反应慢或者超时严重,主动熔断,当情况好转后,可以自动重连
    3. 策略:服务降级、服务限流、服务熔断、服务重连
    4. 常用参数:https://www.cnblogs.com/chongaizhen/p/11132066.html
    5. 集成ribbon组件

    二、依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

    三、配置

    hystrix:
      command:
          default:
            execution:
              isolation:
                thread:
                  timeoutInMillisecond: 6000 # 设置hystrix的超时时间为6000ms,一定要大于ribbon的超时时间,否则会先被负载均衡器拦截掉。
    # Hystrix 默认加载的配置文件
     
    # 线程池大小
    hystrix.threadpool.default.coreSize=1
    # 缓冲区大小, 如果为-1,则不缓冲,直接进行降级 fallback
    hystrix.threadpool.default.maxQueueSize=200
    # 缓冲区大小超限的阈值,超限就直接降级
    hystrix.threadpool.default.queueSizeRejectionThreshold=2
     
    # 执行策略
    # 资源隔离模式,默认thread。 还有一种叫信号量
    hystrix.command.default.execution.isolation.strategy=THREAD
    # 是否打开超时
    hystrix.command.default.execution.timeout.enabled=true
    # 超时时间,默认1000毫秒
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000
    # 超时时中断线程
    hystrix.command.default.execution.isolation.thread.interruptOnTimeout=true
    # 取消时候中断线程
    hystrix.command.default.execution.isolation.thread.interruptOnFutureCancel=false
    # 信号量模式下,最大并发量
    hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=2
     
    # 降级策略
    # 是否开启服务降级
    hystrix.command.default.fallback.enabled=true
    # fallback执行并发量
    hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=100
     
    # 熔断策略
    # 启用/禁用熔断机制
    hystrix.command.default.circuitBreaker.enabled=true
    # 强制开启熔断
    hystrix.command.default.circuitBreaker.forceOpen=false
    # 强制关闭熔断
    hystrix.command.default.circuitBreaker.forceClosed=false
    # 前提条件,一定时间内发起一定数量的请求。  也就是5秒钟内(这个5秒对应下面的滚动窗口长度)至少请求4次,熔断器才发挥起作用。  默认20
    hystrix.command.default.circuitBreaker.requestVolumeThreshold=100
    # 错误百分比。达到或超过这个百分比,熔断器打开。  比如:5秒内有4个请求,2个请求超时或者失败,就会自动开启熔断
    hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
    # 10秒后,进入半打开状态(熔断开启,间隔一段时间后,会让一部分的命令去请求服务提供者,如果结果依旧是失败,则又会进入熔断状态,如果成功,就关闭熔断)。 默认5秒
    hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=10000 
     
    # 度量策略
    # 5秒为一次统计周期,术语描述:滚动窗口的长度为5秒
    hystrix.command.default.metrics.rollingStats.timeInMilliseconds=5000
    # 统计周期内 度量桶的数量,必须被timeInMilliseconds整除。作用:
    hystrix.command.default.metrics.rollingStats.numBuckets=10
    # 是否收集执行时间,并计算各个时间段的百分比
    hystrix.command.default.metrics.rollingPercentile.enabled=true
    # 设置执行时间统计周期为多久,用来计算百分比
    hystrix.command.default.metrics.rollingPercentile.timeInMilliseconds=60000
    # 执行时间统计周期内,度量桶的数量
    hystrix.command.default.metrics.rollingPercentile.numBuckets=6
    # 执行时间统计周期内,每个度量桶最多统计多少条记录。设置为50,有100次请求,则只会统计最近的10次
    hystrix.command.default.metrics.rollingPercentile.bucketSize=100
    # 数据取样时间间隔
    hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds=500
     
    # 设置是否缓存请求,request-scope内缓存
    hystrix.command.default.requestCache.enabled=false
    # 设置HystrixCommand执行和事件是否打印到HystrixRequestLog中
    hystrix.command.default.requestLog.enabled=false 
     
    # 限流策略 
    #如果没有定义HystrixThreadPoolKey,HystrixThreadPoolKey会默认定义为HystrixCommandGroupKey的值
    hystrix.threadpool.userGroup.coreSize=1
    hystrix.threadpool.userGroup.maxQueueSize=-1
    hystrix.threadpool.userGroup.queueSizeRejectionThreshold=800
    hystrix.threadpool.userThreadPool.coreSize=1 hystrix.threadpool.userThreadPool.maxQueueSize=-1 hystrix.threadpool.userThreadPool.queueSizeRejectionThreshold=800 hystrix.command.userCommandKey.execution.isolation.thread.timeoutInMilliseconds=5000

    四、常用注解

    @EnableHystrix:启动类,开户hystix功能
    @EnableCircuitBreaker:需要实现熔断的类上,与@HystrixCommand配合使用 @HystrixCommand:需要实现熔断的方法上,与@EnableCircuitBreaker配合使用 @DefaultProperties:为实现熔断的类增加默认容错方法 @HystrixProperty:与@HystrixCommand配合使用,设置熔断的参数,比如超时时长
  • 相关阅读:
    virtualBox下面安装linux系统如何共享目录
    PHP中spl_autoload_register()函数
    PHP 5.5 新特性
    useradd密码无效
    Linux audit安全审计工具
    Javascript class获取回调函数数据
    RPi 3B 无线连接配置
    Refused to execute inline event handler because it violates the following Content Security Policy directive: "xxx". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...')
    options.html:1 Refused to load the script 'xxxx' because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".
    jQuery.Deferred exception: $.get is not a function TypeError: $.get is not a function
  • 原文地址:https://www.cnblogs.com/flame540/p/12825712.html
Copyright © 2020-2023  润新知