您现在的位置是:首页 > 文章详情

10多倍的性能差距之dawdler-series对比springCloud性能测试过程

日期:2025-06-13点击:72

做一个简单的介绍(相知者,会意无需多言。陌路人,难入心万语间。)

dawdler-series

dawdler-series 是一站式分布式应用、微服务架构的解决方案,其特点简单、高效(启动、运行速度快)、安全、灵活、可扩展性强. 功能包含webmvc架构、高性能分布式session、动态网关、验证架构(前后台通用表达式)、web拦截器、web监听器、服务过滤器、服务生命周期监听器、熔断器、链路追踪、健康检测、统一配置中心、分布式事务、支持读写分离的事务管理器、分库、分表、注册中心、服务间认证授权、高效的编译型aop、常用插件(schedule、cache、mybatis、dao、elasticsearch、redis、rabbitmq)。

dawdler-boot

dawdler-boot使创建独立的、生产级的基于dawdler-series的应用程序变得更加容易,支持ide中main方法运行,也支持通过maven工具构建fastjar独立运行
直接嵌入dawdler-server、undertow(无需部署WAR文件和dawdler-server服务文件)
提供统一规范的依赖关系,以简化并规范您的依赖配置

 

1、测试目标

本次测试从  启动时间、打包大小和wrk相关指标来做对比

Latency 请求的平均延迟(从发送请求到收到响应的时间)
Req/Sec 每秒处理的请求数(吞吐量)
Requests/sec 整体每秒请求数(即 QPS)
Transfer/sec 每秒传输的数据量(响应体大小)

 

2、操作系统

3、jdk版本 

jdk1.8(dawdler-series也有支持LTS版本 jdk17 jdk21 为了方便演示采用jdk.18

4、软件版本 

4.1、 dawdler-series

version

dawdler web容器版本 undertow-core-1.4.28.Final

4.2、spring-cloud

spring-boot版本 1.5.22.RELEASE(最后一个1x的版本)

spring-cloud版本 Dalston.RELEASE

spring-cloud web容器版本 undertow-core-1.4.27.Final

5、测试步骤

分别下载准备好的压测程序.

下载wrk 压测工具(自己找方法)

dawdler-series的程序 http://dawdler.club/dawdler-series-stress-testing.zip

spring-cloud的程序 http://dawdler.club/spring-cloud-stress-testing.zip

解压并以maven项目导入到开发工具中 推荐vscode、eclipse。为什么没有 idea? 当然idea也可以 只是我不推荐用商业软件、或破解版。如果非要用建议用社区版。

5.1、dawdler-series压测步骤

安装consul(用于做注册中心)安装步骤很简单 参考官网 https://developer.hashicorp.com/consul/install  不建议设token因为测试 越简单越好 

安装完成consul之后 访问consul控制台 http://localhost:8500/

创建一个/consul配置项用于做注册中心

/consul的内容如下:

host: localhost
port: 8500

参考下图:

 

基于导入的dawdler-series-stress-testing项目启动用户的基础服务

基于上图可以看到 用户服务已启动 启动用时 253ms。

继续启动web端

 

基于上图可以看到 用户web服务已启动 启动用时 525ms. 注意端口号为:8085。

通过wrk进行压测:

wrk -t12 -c400 -d10 --latency http://localhost:8085/user/infoNoDB?id=1

执行两次的结果如下图:

 

压测期间服务端与web端的 cpu、内存使用情况如下图:

 

 

 

观察cpu整体使用率大概为65%左右。

 

5.2、spring-cloud压测步骤

基于导入的spring-cloud-stress-testing项目启动eureka注册中心 如下图:

 

继续启动用户的基础服务

 

启动完成时间2278ms。

 

继续启动用户web端

启动完成时间2157ms。

通过wrk进行压测:

wrk -t12 -c400 -d10 --latency http://localhost:8765/user/infoNoDB?id=1

执行两次的结果如下图:

 

压测期间服务端与web端的 cpu、内存使用情况如下图:

 

 

 

观察cpu整体使用率大概为92%左右。

springcloud的web端在进行压测过程中开始报错 错误如下:

 

6、综合对比

6.1 、启动速度对比

架构 web端 服务端
dawdler-series 525ms 253ms
spring-cloud 2157ms 2278ms

 

在实际项目中(很多服务的情况下) dawdler-series的启动大概在800ms内完成。spring-cloud 大概在15-20秒左右完成。

6.2 、打包大小对比

以下都是最小依赖包的情况。感兴趣的可以看具体项目依赖。

架构 web端 服务端
dawdler-series 14M 9.3M
spring-cloud 35M 35M

6.3、性能对比

第一次请求

架构 10秒内成功请求次数 每秒处理成功请求 每秒传输字节数 总共传输字节数
dawdler-series 3791349 378801.02 101.87MB 1.00GB
spring-cloud 253093 25243.08 7.23MB 72.53MB

 

spring-cloud已经出现失败请求了  如上图中的 Non-2xx or 3xx responses: 595

 

第二次请求

架构 10秒内成功请求次数 每秒处理成功请求 每秒传输字节数 总共传输字节数
dawdler-series 4004514 396506.95 106.64MB 1.05GB
spring-cloud 23013 2289.08 709.34KB 6.96MB

 

第二次spring-cloud继续出现 Non-2xx or 3xx responses: 1833

 

出现这个错误时spring-cloud web端会报错 Caused by: feign.RetryableException: 无法分配被请求的地址 (connect failed) executing POST http://user-service/user/selectByPrimaryKeyNoDB。

 

写在最后

spring、spring-boot、spring-cloud 框架简化了很多开发步骤、提高了开发效率、学习成本个人认为还是很高的。特别是遇到一些坑需要排查源码才能找到问题。如我之前的文章 *(致命的bug)https://my.oschina.net/u/3861980/blog/5080608  、https://my.oschina.net/u/3861980/blog/11048734、(致命的bug)https://my.oschina.net/u/3861980/blog/11046282

dawdler-series是一整套微服务解决方案(当然也支持单体应用啦) 具体请参考 https://dawdler.club 。同样简化了开发步骤,提供代码生成器、文档生成器来提高开发效率 。如果零基础学习对比 那一定比spring-cloud要简单的多。

https://dawdler.club  里面的快速入门提供了 dawdler-boot的入门示例。各个组件的文档也相对全面。

 

最后我想说适合自己的就是最好的,阿里的朋友提醒过我 也许你开源出来会有些喷子。你要做好心理准备。我给他的回答是  如果是那种恶意喷 我完全不care,有能力他写一套我看看?当然喷得对的 我还是愿意去改进的....欢迎出于好心的“喷”。

dawdler.club所有产品采用apache-2.0开源协议。无论学习、个人、商用等全部永久开源免费。永远不会考虑商业化(别问为什么... 因为我不需要用钱....)。

 

 

 

原文链接:https://my.oschina.net/u/3861980/blog/18621886
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章