Hystrix

做熔断,可通过继承HystrixCommand重写run方法实现或者使用HystrixCommand注解进行实现,指定熔断失败的fallback方法。

默认10秒请求数超过20个,50%以上失败触发熔断,执行getFallback方法。每五秒尝试试探,成功的话关闭熔断

熔断相关配置:circuitBreaker.enabled默认true,circuitBreaker.requestVolumeThreshold 默认20

熔断状态:开启,关闭,半开启。内部在熔断器中心有个Metric模块。对当前接口数据流进行了订阅,当数据流产生变化,触发onnext函数回调,内部保存了hc变量(前十秒接口请求总数、失败数,失败率),满足熔断条件触发熔断状态变更,更新熔断时间戳等。

执行逻辑有两种模式:

1:信号量模式:当前线程接受请求执行下游逻辑,都在一个线程处理,设置execution.isolation.semaphore.maxConcurrentRequests设置最大并发数。超过的情况下进行降级处理。(内部通过计数器实现)

线程池模式(默认方式):下游依赖服务单独放入线程池,不同依赖线程池隔离开,相互之间不影响

通过限流信号量设置阈值方式,保证并发量情况下降级处理。

大致流程:

1.一个请求命令到来,首先判断是否存在缓存数据,存在返回

2.熔断器是否开启,是的话直接调用fallback。否则判断线程池是否已满,满的话fallback,上报拒绝

3.正常的话执行run方法,超时或者一场进行超时或者失败上报,执行fallback,执行成功的话返回结果,上报成功

你可能感兴趣的:(Hystrix)