Hystrix使用学习
1. 雪崩效应
一个用户请求处理依赖多个服务,如一个用户请求依赖了服务A,P,H,I,正常情况下均能正常访问并返回
![](https://img.haomeiwen.com/i2650335/d1c5be3afcbf4984.png)
共有5种情况会触发降级处理:
1.run()方法抛出非HystrixBadRequestException异常。
2.run()方法调用超时。
3.熔断器开启。
4.线程池已满。
5.显示调用fallback逻辑(用于特殊业务处理)
当阻塞发生时(异常,超时等),由于采用了服务降级的处理,可以保证访问可以继续进行。
5 参数设置
参数 | 作用 | 备注 |
---|---|---|
maxQueueSize | 请求等待队列 | 默认值:-1,如果使用正数,队列将从SynchronizeQueue改为LinkedBlockingQueue |
groupKey | 表示所属的group,一个group共用线程池 | 默认值:getClass().getSimpleName() |
fallback.isolation.semaphore.maxConcurrentRequests | fallback最大并发度 | 默认值:10 |
execution.timeout.enabled | 是否打开超时 | |
execution.isolation.thread.timeoutInMilliseconds | 超时时间 | 默认值:1000;</br>在THREAD模式下,达到超时时间,可以中断;</br>在SEMAPHORE模式下,会等待执行完成后,再去判断是否超时.</br>设置标准:</br>有retry,99meantime+avg meantime; 没有retry,99.5meantime |
execution.isolation.thread.interruptOnTimeout | 是否打开超时线程中断 | THREAD模式有效 |
execution.isolation.strategy | 隔离策略,有THREAD和SEMAPHORE | 默认使用THREAD模式,以下几种可以使用SEMAPHORE模式:1.只想控制并发度;</br> 2.外部的方法已经做了线程隔离; </br>3.调用的是本地方法或者可靠度非常高、耗时特别小的方法(如medis)</br> |
execution.isolation.semaphore.maxConcurrentRequests | 信号量最大并发度 | SEMAPHORE模式有效,默认值:10 |
coreSize | 线程池coreSize | 默认值:10</br>设置标准:qps*99meantime+breathing room |
commandKey | 默认值:当前执行方法名 | |
circuitBreaker.sleepWindowInMilliseconds | 熔断多少秒后去尝试请求 | 默认值:5000 |
circuitBreaker.requestVolumeThreshold | 熔断触发的最小个数/10s | 默认值:20 |
circuitBreaker.forceClosed | 是否强制关闭熔断 | 如果是强依赖,应该设置为true |
circuitBreaker.errorThresholdPercentage | 失败率达到多少百分比后熔断 | 默认值:50</br>主要根据依赖重要性进行调整 |
参考学习:
Hystrix wiki
Hystrix 分析与使用
网友评论