SpringCloud gateway与zuul1服务阻塞压测对比

时间:2024-04-09 06:59:30

一、背景

我们在落地微服务网关的时候,采用的SpringCloudZuul,老大提了一个问题,如果网关在代码服务1阻塞的时候,是否会阻塞服务2/服务3/服务4…等。带着这个问题我进行了探索。

二、测试过程

2.1 SpringCloudZuul模拟服务阻塞测试

SpringCloud gateway与zuul1服务阻塞压测对比
SpringCloud gateway与zuul1服务阻塞压测对比
可以看到服务2阻塞了。

为了让测试效果更明显,我们增加并发用户数到400。
tomcat maxThreads参数(请求处理线程的最大数量)为200,当并发请求个数超过200时,就需要排队。SpringCloud gateway与zuul1服务阻塞压测对比

2.2 SpringCloudGateway模拟服务阻塞测试

SpringCloud gateway与zuul1服务阻塞压测对比
SpringCloud gateway与zuul1服务阻塞压测对比
可以看到当服务1阻塞的时候,服务2完全不受影响。

三、原因分析

zuul 1本质上是一个web servlet,基于servlet2.5,代码简单易看懂,但是使用阻塞api.
Spring cloud gateway使用netty进行网络通信建立在Spring Framework 5,Project Reactor和Spring Boot 2上,使用非阻塞API。

四、结论

Zuul编程模型简单,而且稳定,生产环境推荐调优参数如下。
SpringCloud gateway与zuul1服务阻塞压测对比
我们为了从根本上解决问题,选用了SpriingCloudGateway定制实现了自己的微服务网关。

参考资料:
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
Spring Cloud Gateway(路由)