一、背景
我们在落地微服务网关的时候,采用的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(路由)
本文探讨了在微服务网关中,SpringCloudZuul和SpringCloudGateway在服务阻塞情况下的表现。通过模拟服务阻塞测试发现,Zuul在服务1阻塞时可能会影响其他服务,而SpringCloudGateway则能保持服务间的独立性。分析原因发现,Zuul基于阻塞API,而SpringCloudGateway使用非阻塞API和Netty,因此在高并发下有更好表现。最终,由于性能和可扩展性的考虑,选择了SpringCloudGateway作为定制的微服务网关。

1941





