Java Web 框架对比,原来 Webflux 性能最差。
这一篇文章将对比通过不同方式创建的 java 应用程序的测试对比。
测试对象
Springboot Web:springboot web 应用。
Springboot Webflux:springboot webflux 应用。
Quarkus:Redhat 推出的一个更偏向容器的框架。
Vert.x:Eclipse 基于 Netty 做的二次开发的一个框架。
测试条件
全部使用默认配置。
数据库连接池最大数设置为 50,由于 vert.x 机制不同,所以不需要设置。
提供一个 Http 请求
/rss
接口,将从数据库查询 100 条记录。
select * from rssentry order by publish_at desc limit 100
数据库连接池都已创建。
测试 plan
Jmeter 同时执行 4 个 http sample。
测试结果
问题
springboot webflux 在高并发情况下,性能下降很厉害,猜测跟默认的 workgroup size 偏小的缘故。
通过观察数据库连接,vertx 会根据请求生成数据库连接,当有 100 个并发请求的时候,会生成 100 个数据库连接,但访问结束不会保留数据库连接,所以在数据库里看不到常驻的连接,而 springboot 和 quarkus 在数据库当中可以看到常驻连接数。而在需要创建数据库连接的情况下,表现跟 springboot 类似,猜测跟 pgpool 的 reactor 模式对数据库连接做了优化。
结论
总体来说,springboot web 总体表现在默认配置下都是比较优秀的。
并发不高的情况下,springboot web 和 springboot webflux 总体表现要比 quarkus 和 vertx 要好。
并发高的情况下,springboot webflux 性能下降的很厉害。
在数据库线程池不足的情况下,vertx 的表现要优化其他。
个人推荐
Vert.x 更偏向于原生的开发,在追求极致性能的情况下,推荐使用。
用 Hotspot JVM 情况下,推荐使用 Springboot Web。
使用 Native Image 的情况下,推荐使用 Quarkus,更容易集成。
版权声明: 本文为 InfoQ 作者【Kevin_913】的原创文章。
原文链接:【http://xie.infoq.cn/article/570a485880911407d8f1c3a54】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论