熔断器Hystrix:什么是雪崩?什么是熔断?
熔断器Hystrix:什么是雪崩?如何处理?
当微服务I发生异常,请求阻塞,用户就不会得到响应,则线程不会被释放,于是越来越多的用户请求到来,越来越多的线程就会阻塞,发生雪崩
如何处理?
Hystrix解决雪崩问题的手段主要是服务降级,包括:
- 线程隔离
- 服务熔断
Hysyrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间
用户的请求将不再直接访问服务器,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超时,则会进行降级处理,什么是服务降级?
服务降级:优先保证核心服务,而非核心服务不可用或弱可用
用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息)
服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其他服务没有响应。
触发Hystrix服务降级的情况:
- 线程池 已满
- 请求超时
Hystrix服务熔断机制?如何配置?
Hystrix 的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。通过断路的方式,将后续请求直接拒绝,一段时间(默认5秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打开,拒绝请求的服务。
hystrix:
command:
default:
circuitBreaker:
errorThresholdPercentage: 50 #触发熔断错误比例阈值,默认值50%
sleepWindowInMilliseconds: 10000 #熔断后休眠时长,默认值为5秒
requestVolumeThreshold: 10 #熔断触发最小请求次数,默认值20
execution:
isolation:
thread:
timeoutInMilliseconds: 2000 #熔断超时设置,默认为1秒