Hystrix基础

什么是Hystrix?

在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败雪崩,这个就是Hystrix需要做的事情。

hystrix功能

  • 隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。
  • 优雅的降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
  • 熔断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。
  • 缓存:提供了请求缓存、请求合并实现。
  • 支持实时监控、报警、控制(修改配置)

隔离

在这里插入图片描述

线程池隔离 信号量隔离
线程 与调用线程非相同线程 与调用线程相同
开销 排队、调度、上下文开销等 无线程切换,开销低
异步 支持 不支持(无法削峰)
并发支持 支持(最大线程池大小) 支持(最大信号量上限)

熔断

正常状态下,电路处于闭合状态(Closed),如果调用持续出错或者超时,电路被打开进入熔断状态(Open),后续一段时间内的所有调用都会被拒绝(Fail Fast),一段时间以后,保护器会尝试进入半熔断状态(Half-Open),允许少量请求进来尝试,如果调用仍然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态;
在这里插入图片描述

降级

降级需要对下层依赖的业务分级,把产生故障的丢了,换一个轻量级的方案,是一种退而求其次的方法。
通常降级有:1.如果服务失败,则我们通过fallback进行降级,返回静态值。2.采用服务级联的模式,如果第一个服务失败,则调用备用服务,例如失败重试或者访问缓存失败再去取数据库。

hystrix应用

在这里插入图片描述
参数说明

参数类型 参数名 默认值 说明
command配置 executionIsolationStrategy ExecutionIsolationStrategy.THREAD 信号隔离或线程隔离,默认:采用线程隔离,
executionIsolationThreadTimeoutInMillisecond 1s 隔离时间大,即多长时间后进行重试
executionIsolationSemaphoreMaxConcurrentRequests 10 使用信号量隔离时,命令调用最大的并发数,默认:10
fallbackIsolationSemaphoreMaxConcurrentRequests 10 使用信号量隔离时,命令fallback(降级)调用最大的并发数,默认:10
fallbackEnabled true 是否开启fallback降级策略
executionIsolationThreadInterruptOnTimeout true 使用线程隔离时,是否对命令执行超时的线程调用中断(Thread.interrupt())操作
metricsRollingStatisticalWindowInMilliseconds 10000ms 统计滚动的时间窗口,默认:10s
metricsRollingStatisticalWindowBuckets 10 统计窗口的Buckets的数量,默认:10个
metricsRollingPercentileEnabled true 是否开启监控统计功能,默认:true
requestLogEnabled true 是否开启请求日志
requestCacheEnabled true 是否开启请求缓存
熔断器配置 circuitBreakerRequestVolumeThreshold 20 主要用在小流量
circuitBreakerSleepWindowInMilliseconds 5000ms 熔断器默认工作时间,默认:5秒.熔断器中断请求5秒后会进入半打开状态,放部分流量过去重试
circuitBreakerEnabled true 是否启用熔断器,默认true. 启动
circuitBreakerErrorThresholdPercentage 50 默认:50%。当出错率超过50%后熔断器启动
circuitBreakerForceOpen false 是否强制开启熔断器阻断所有请求,默认:false,不开启
circuitBreakerForceClosed false 是否允许熔断器忽略错误,默认false, 不开启
线程池配置 HystrixThreadPoolProperties.Setter().withCoreSize(int value) 10 配置线程池大小,默认值10个
HystrixThreadPoolProperties.Setter().withMaxQueueSize(int value) -1 配置线程值等待队列长度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章