一、背景
我们在落地微服务网关的时候,采用的SpringCloudZuul,老大提了一个问题,如果网关在代码服务1阻塞的时候,是否会阻塞服务2/服务3/服务4…等。带着这个问题我进行了探索。
二、测试过程
2.1 SpringCloudZuul模拟服务阻塞测试
可以看到服务2阻塞了。
为了让测试效果更明显,我们增加并发用户数到400。
tomcat maxThreads参数(请求处理线程的最大数量)为200,当并发请求个数超过200时,就需要排队。
2.2 SpringCloudGateway模拟服务阻塞测试
可以看到当服务1阻塞的时候,服务2完全不受影响。
三、原因分析
zuul 1本质上是一个web servlet,基于servlet2.5,代码简单易看懂,但是使用阻塞api.
Spring cloud gateway使用netty进行网络通信建立在Spring Framework 5,Project Reactor和Spring Boot 2上,使用非阻塞API。
四、结论
Zuul编程模型简单,而且稳定,生产环境推荐调优参数如下。
我们为了从根本上解决问题,选用了SpriingCloudGateway定制实现了自己的微服务网关。
参考资料:
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
Spring Cloud Gateway(路由)