Netflix Hystrix - 降级

154 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


fallback降级机制

1、创建command

2、执行command

3、request cache

4、短路器如果被打开,启用fallback降级机制

触发fallback

hystrix调用各种接口,或者访问外部依赖,mysql,redis,zookeeper,kafka等等,出现异常的情况。

error:访问mysql报错,redis报错,zookeeper报错,kafka报错。

reject:对每个外部依赖,无论是服务接口,中间件,资源隔离,对外部依赖只能用一定量的资源去访问,线程池/信号量,资源池已满。

timeout:访问外部依赖的时候,访问时间过长,可能就会导致超时,报一个TimeoutException异常。

circuit breaker:如果短路器发现异常事件的占比达到了一定的比例,直接开启短路。

error、reject、timeout属于对外部依赖的东西访问的时候出现了异常,发送异常事件到短路器中去进行统计

circuit breaker直接调用fallback降级机制

fallback降级机制,为了避免外部依赖有故障。

比如,在内存中维护一个ehcache,作为一个纯内存的基于LRU自动清理的缓存,数据也可以放入缓存内,如果外部依赖有异常,fallback降级机制启用,直接尝试从ehcache中获取数据。

比如,从mysql,redis,或者其他任何地方去获取数据的,获取调用其他服务的接口的,结果依赖服务故障,fallback降级机制启用,可以返回一个默认值。

降级机制实现

内存数据

默认值

run()抛出异常,超时,线程池或信号量满了,或短路了,都会调用fallback机制。

HystrixCommand是实现getFallback方法

HystrixObservableCommand是实现resumeWithFallback方法

HystrixCommandProperties.Setter()
    .withFallbackIsolationSemaphoreMaxConcurrentRequests(10)

这个参数设置了HystrixCommand.getFallback()最大允许的并发请求数量,默认值是10,是通过semaphore信号量的机制去限流,如果超出了这个最大值,直接被reject。