Hystrix高并发引发的问题

32 阅读1分钟

新建ape-cloud-hystix模块

image.png

增加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        <version>2.2.10.RELEASE</version>
    </dependency>
</dependencies>

sku模块引入

<dependency>
    <groupId>com.ssm</groupId>
    <artifactId>ape-cloud-hystrix</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

新增测试方法

@GetMapping("testHystrix")
public String testHystrix() {
    return "hello hystrix";
}

@GetMapping("testHystrixTimeOut")
public String testHystrixTimeOut() throws InterruptedException {
    Thread.sleep(5000);
    return "Hello hystrix timeOut!";
}

一个是正常的快速返回。

一个是睡了5s。

重启后,测试其中的返回结果是否正常。

在我们进行来回的两个接口的点击下,接口都是可以正常响应的。其实程序在等待5s也没有产生太大的问题。

高并发

在实际的工作中,如果说我们做的是C端的高并发请求。那么会产生什么情况呢?

我们通过apiPost进行压测的测试。设置并发数2000,持续时长300s。

image.png

再次请求可以快速返回的testHystrix接口,发现一直不返回数据。因为我们的项目的线程都被上一个耗尽了。资源已经无法进行倾斜。这是我们通过测试这个项目而言的。

image.png

如果我们通过的是feign的调用,那对于我们来说也是一样的,因为最终提供服务的还是我们的这sku服务。

再次演示通过feign来调用的形式查看。假设这个时候我们的home服务也是高并发,那就炸了。全部卡住。

于是,就有了hystrix的降级和限流。

什么情况需要降级?

  • 超时不断等待
  • 调用不断报错

基于此延伸出几种情况

如果sku服务超时,home服务不能一直等待,进行降级

如果sku服务挂了,home服务不能一直等待,进行降级

如果sku没事,home等不了,也降级。