Hystrix服务降级,熔断,隔离

服务降级:

高并发情况下,为了不让客户端一直等待,直接返回给客户端一个友好提示(不回去处理请求,调用fallBack本地方法);

比如12306抢票(显示正在排队,前面还有xx人),某宝秒杀(返回已售罄等)。

服务熔断:

高并发情况下,如果请求达到了服务请求数达到了一定的极限(阈值),为了保护服务,自动开启服务保护功能,使用服务降级的方式直接返回一个友好的请求,和服务降级一起使用。

服务隔断:

高并发情况下,将各个服务接口隔离开。

我们用Jmeter测试带有注解@HystrixCommand的接口,并发数20000,同事访问其他接口是没有任何问题的,这就是Hystrix将接口隔离开了,高并发情况下不影响其他接口的调用。

 

Hysyrix的使用:

加入依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.1.RELEASE</version> 
</dependency>

启动类添加@EnableHystrix注解

需要隔断的高并发接口添加@HystrixCommand("orderBack")

回执消息接口:

public BaseResponse orderBack(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age){
    return  BaseResponse.success("服务器繁忙,请稍后重试!");
}

Hystrix服务降级,熔断,隔离

我们使用Jmeter进行orderToMember进行2000的并发测试,同事手动输入地址访问此接口,可以看到一下结果表示成功了。熔断机制的目的是为了在高并发的情况下保护服务,否则就会造成服务的雪崩效应。

Hystrix服务降级,熔断,隔离

 

这里我在测试的时候,增加并发数量到100000的话,后台发生报错:

Hystrix服务降级,熔断,隔离

com.netflix.hystrix.exception.HystrixRuntimeException: orderToMember fallback execution rejected.

这个错误应该是由于回执接口的并发数量也达到了阈值。我上面增加了阈值到5000,但不管用。从网上也没找到什好的解决办法。

https://github.com/Netflix/Hystrix/issues/796

Git上讨论的也是含糊其辞,若是有解决办法,请下方评论区指教。