微服务网关选型(spring|微服务网关选型:spring cloud gateway、zuul 1性能对比测试)
1.Spring Cloud gateway与zuul1实现方式对比分析
zuul 1本质上是一个web servlet,基于servlet2.5,代码简单易看懂,但是使用阻塞api,不支持任何长连接,如websocket。
Spring cloud gateway使用netty进行网络通信建立在Spring Framework 5,Project Reactor和Spring Boot 2上,使用非阻塞API。支持Websockets,因为它与Spring紧密集成,所以它是一个更好的开发者体验。
优劣势分析:
文章图片
2.压测工具选择
经过各个维度的对比测试,压测工具选择wrk
wrk是一款简单的HTTP压测工具,托管在Github上有20k star,https://github.com/wg/wrk。
wrk的一个很好的特性就是能用很少的线程压出很大的并发量。原因是它使用了一些操作系统特定的高性能io机制,比如选择,epoll,kqueue等。其实它是复用了redis的ae异步事件驱动框架。确切的说ae事件驱动框架并不是redis发明的,它来至于Tcl的解释器jim,这个小巧高效的框架,因为被redis采用而更多的被大家所熟知。
3.测试方法与环境
结合业务实际情况,压测部分主要压测HTTP 1.1协议,由于使用的tomcat容器压测并发范围100~1500(250是最佳并发),spring cloud gateway 2.1.1和spring cloud支持最高zuul版本1.3.1。
建立三个项目用于测试
项目1:使用springboot搭建springcloud gateway
项目2:使用springboot搭建springcloud zuul
项目3:使用springboot搭建测试api,分别编写空负载接口与模拟50ms业务处理接口
分别使用springcloud gateway与zuul代理测试api,压测其性能
测试服务器信息:
文章图片
3.压测
3.1 100并发空负载测试
文章图片
3.2 250 并发空负载测试
文章图片
3.3 500 并发空负载测试
文章图片
3.4 1000并发空负载测试
文章图片
3.5 100并发模拟50ms业务处理
文章图片
3.6 250 并发模拟50ms业务处理
文章图片
3.7 500并发模拟50ms业务处理
文章图片
3.8 1000并发模拟50ms业务处理
文章图片
4.结果初步分析
【微服务网关选型(spring|微服务网关选型:spring cloud gateway、zuul 1性能对比测试)】初步分析,在空负载的时候,SpringCloud Gateway比zuul 1 性能高50%左右,在模拟处理50ms业务后,,SpringCloud Gateway比zuul 1 性能高9倍左右。
但是考虑到zuul使用默认配置,结果可能不准,上网查找zuul生产优化配置调优后再次进行50ms业务处理压测。而SpringCloud Gateway查阅资料后暂无需优化
zuul优化参数参考如下:
文章图片
红框标记的参数是生产推荐参数,优化配置后再次进行压力测试
5.zuul优化后的压测对比
5.1 100并发模拟50ms业务处理
文章图片
5.2 250 并发模拟50ms业务处理
文章图片
5.3 500并发模拟50ms业务处理
文章图片
5.4 1000并发模拟50ms业务处理
文章图片
6. 最终结果与结论
6.1 性能比较结论
在实际生产使用中zuul 1与gateway性能差距较小
可以看出,在实际生产使用中,zuul 1虽然使用的是同步io,但是可以通过参数优化提高性能理论上可以达到极限性能,而springcloud gateway使用的是异步io,不需优化既可以达到接近极限的性能。
从5.1~5.4的压测结果来看,优化后的zuul 1和springcloud gateway性能都很强,由于底层使用的是java基本已经是极限性能(从二者十分接近可以看出),二者平均耗时与最大耗时的比较恰好是同步和异步的特征,异步总体平均耗时比同步略高一点点,而异步由于线程内部切换导致响应时间分布没有同步均匀。这个特性与测试结果符合,证实了测试数据的可靠性。
6.2 zuul1与gateway选择参考
如果是新的Springcloud项目,建议使用gateway,因为Spring官方主推gateway,而zuul最高只支持到1.3.1版本。而zuul 2的实现原理也是异步netty,与gateway,可以推断出gateway网关使用的技术是未来的主流方向,同时有很好的官方支持,与Springcloud兼容性好,并且开发使用简单。
如果是使用zuul的已有项目,不建议更换网关,使用Spring自带的zuul 1较为稳定,且有大量的业内生产验证,排查问题方便,同时性能也不存在问题,缺点是不支持长连接,不支持websocket。
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- CET4听力微技能一
- 微习惯复盘
- 社保代缴公司服务费包含哪些
- 员工的微信朋友圈是公司的宣传阵地吗()
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- FBI怎么和恐怖分子谈判
- 探索免费开源服务器tomcat的魅力
- 微雨中的东湖
- 小醉微记|小醉微记|心不安处皆动荡