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("服务器繁忙,请稍后重试!"); }
我们使用Jmeter进行orderToMember进行2000的并发测试,同事手动输入地址访问此接口,可以看到一下结果表示成功了。熔断机制的目的是为了在高并发的情况下保护服务,否则就会造成服务的雪崩效应。
这里我在测试的时候,增加并发数量到100000的话,后台发生报错:
com.netflix.hystrix.exception.HystrixRuntimeException: orderToMember fallback execution rejected.
这个错误应该是由于回执接口的并发数量也达到了阈值。我上面增加了阈值到5000,但不管用。从网上也没找到什好的解决办法。
https://github.com/Netflix/Hystrix/issues/796
Git上讨论的也是含糊其辞,若是有解决办法,请下方评论区指教。