浅出Hystrix2--加深理解和个人笔记

基本运用

依赖隔离 --- 线程池隔离 ----- 线程池开销对比隔离带来的好处,99%情况下延迟为9ms

针对对实时要求特别高的可以使用信号量,前提是服务足够可靠和快速。

通过spring cloud config和Spring Cloud bus 刷新动态属性来灵活控制hystrix

 

命令名称、分组、线程池划分

hystrix根据组来统计实现度量统计,默认的线程池的划分也是根据组来的,默认会让相同的组使用同一个线程池,但是也可以对线程池就行设置(如果不想同一个服务接口相互影响可以指定线程池),通过@hystrixCommand的commandKey、groupKey、threadPoolKey、commandProperties也可以设置。

//设置HystrixCommand的属性 super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("HystrixCommandDemoGroup"))

.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("HystrixCommandDemoPool"))

.andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD))

.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter().withCoreSize(10))

.withExecutionTimeoutInMilliseconds(500))

 

请求缓存:

开启请求缓存、通过重载getCacheKey()方法开启、注解通过@CacheResult、@CacheRemove、@CacheKey(放在方法参数上用来标记key值,如果通过@CacheResult/remove定义了key,@CacheKey注解将不生效)

查询高并发情况下建议使用请求缓存。

清理失效的请求缓存,HystrixRequestCache.clear(),根据commandKey以及缓存主键清理

Hystrix会尝试从缓存中获取结果、获取不到再调用获取结果后加入缓存。

 

请求合并 HystrixCollapser

1、需要getById等单体查询时,服务端需要实现一个批量处理的接口。

2、将一段时间内(默认10毫秒)的请求合并,通过批量查询接口,减少交互时间和连接数,街道结果后再返回。

http://blog.didispace.com/spring-cloud-hystrix-request-collapse/ 请求合并,包含实现和注解现实

注意,请求合并会带来响应结果的延迟。针对以下可以使用请求合并

1、请求本身无所谓延迟一点

2、延迟时间窗口(10毫秒)的并发量,并发高再使用。

 

配置文件

配置分类优先级由低到高:

hystrix.command.default

全局默认值

全局配置属性

hystrix.command..[HystrixCommandKey].

实例默认值

实例配置值

Hystrix所有的配置都是hystrix.command.[HystrixCommandKey]开头,其中[HystrixCommandKey]是可变的,默认是default,即hystrix.command.default;另外Hystrix内置了默认参数,如果没有配置Hystrix属性,默认参数就会被设置,其优先级:

  • hystrix.command.[HystrixCommandKey].XXX
  • hystrix.command.default.XXX
  • Hystrix代码内置属性参数值

在HystrixCommand和@hystrixCommand注解中通过类似execution.isolation.thread.timeoutInMilliseconds 来配置超时时间

 

command属性:execution属性 hystrix.command.default.execution.

execution.isolation.strategy= THREAD|SEMAPHORE 线程池/信号量 默认信号量

execution.isolation.thread.timeoutInMilliseconds

用来设置thread和semaphore两种隔离策略的超时时间,默认值是1000。

{

建议设置这个参数,在Hystrix 1.4.0之前,semaphore-isolated隔离策略是不能超时的,从1.4.0开始semaphore-isolated也支持超时时间了。

建议通过CommandKey设置不同微服务的超时时间,对于zuul而言,CommandKey就是service id:hystrix.command.[CommandKey].execution.isolation.thread.timeoutInMilliseconds

这个超时时间要根据CommandKey所对应的业务和服务器所能承受的负载来设置,要根据CommandKey业务的平均响应时间设置,一般是大于平均响应时间的20%~100%,最好是根据压力测试结果来评估,这个值设置太大,会导致线程不够用而会导致太多的任务被fallback;设置太小,一些特殊的慢业务失败率提升,甚至会造成这个业务一直无法成功,在重试机制存在的情况下,反而会加重后端服务压力。

}、

execution.timeout.enabled 是否开启超时,默认是true,开启。

execution.isolation.thread.interruptOnTimeout 发生超时是是否中断线程,默认是true

execution.isolation.thread.interruptOnCancel 取消时是否中断线程,默认是false。

execution.isolation.semaphore.maxConcurrentRequests

设置信号量大小,使用信号量时、相对并发请求大于(默认10),后续请求拒绝。

semaphore.maxConcurrentRequests是一个绝对值,无时间窗口,相当于亚毫秒级的,指任意时间点允许的并发数。当请求达到或超过该设置值后,其其余就会被拒绝。默认值是100。(zuul的默认值??)

 

command属性:fallback属性 hystrix.command.default.fallback.

fallback.enabled 默认true

fallback.isolation.semaphore.maxConcurrentRequests 设置fallback执行的最大请求数,默认10

 

command:circuitBreaker属性 hystrix.command.default.circuitBreaker. 断路器属性配置

circuitBreaker.enabled 默认true

条件1和条件2必须都满足

circuitBreaker.requestVolumeThreshold 断路器熔断的最小请求数、默认是20个(条件1)

circuitBreaker.sleepWindowInMilliseconds 熔断以后多久去尝试(熔断时间)默认5000ms

circuitBreaker.errorThresholdPercentage 设置熔断器打卡的错误百分百 50%(条件2)

circuitBreaker.forceOpen 断路器强制打开 默认false

circuitBreaker.forceClosed 断路器强制关闭 默认false

如果circuitBreaker.forceOpen为true此属性不生效。

 

command:metrics属性 hystrix.command.metrics.default.metrics度量指标

merics.rollingStats.timeInMillisenconds 默认是10000ms、默认分成10个桶 动态刷不生效

默认是10000ms、默认分成10个桶, 收集度量信息(断路器健康程度)的时间窗口

merics.rollingStats.numBuckets 默认是10 动态刷不生效

设置桶的数量,默认是10 ,必须能被timeInMillisenconds 整除

merics.rollingPercentile.enabled 默认true,

该属性用来设置对命令的延迟是否使用百分位数来跟踪,如果设置为false,所有概率统计返回-1

merics.rollingPercentile.timeInMillisenconds 默认60000ms 动态刷不生效

设置百分位统计的滚动时间窗口

merics.rollingPercentile.numBuckets 默认6 动态刷不生效

merics.rollingPercentile.bucketSize 默认100 动态刷不生效

设置每个桶默认保留的最大执行次数,先进先出

merics.healthSnapshot.intervalInMillisenconds 默认500ms

采集断路器状态的健康快照(请求的成功、错误百分比)的等待时间

 

requestContext 配置

hystrix.command.metrics.default.requestCache.enabled 默认true 是否开启缓存

hystrix.command.metrics.default.requestLong.enabled 默认true

设置HystrixCommand 执行和事件是否打印日志到HystrixRequestLog中

 

collapser 属性

注解@HystrixCollapser中的collapserProperties属性来设置

hystrix.collapser.default.maxRequestInBatch Integer.MAX_VALUE

设置一次请求中合并批处理的最大请求数量

hystrix.collapser.default.timeDelayInMilliseconds 默认值10ms

设置批处理过程中每个命令延迟的时间

hystrix.collapser.default.requestCache.enabled 默认true

设置批处理过程中否开启缓存

 

threadPool属性

hystrix.threadpool.default.coreSize 默认10

核心线程数,也是命令执行的最大并发数

hystrix.threadpool.default.MaxQueueSize 默认-1 线程池队列大小

hystrix.threadpool.default.queueSizeRejectionThreshold 默认5 动态刷不生效

通过该参数,即使队列没有达到最大值也能拒绝,设置为-1时,该属性不生效

 

hystrix仪表盘以及turbine

详情查看我的博客 https://blog.csdn.net/Zzhou1990/article/details/79098814

也可以通过MQ来收集hystrix度量信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值