1. 前言
最近在网上看到,很多人都讲 Spring Boot Webflux 要超过 SpringMVC ,感觉在高并发的场景下, Spring Boot Webflux 简直就是银弹。(了解源码可+求求: 1791743380)
本文将通过最简单的方式,来简单测试对比一下 Spring Boot Webflux 和 SpringMVC 在高并发场景下的性能。
2. 准备
首先介绍一下本人的硬件情况:
CPU:因特尔的 i7-8700
内存:16G DDR4 2666
系统:win10
压测工具选择 Apache 的 jmeter ,版本为 5.1.1 (版本稍老,笔者未下载最新版本)
接下来就是两个工程了。
SpringMVC 测试代码如下:
代码清单:spring-boot-analysis/spring-boot-mvc-latency/src/main/java/com/springboot/springbootmvclatency/controller/HelloController.java
@RestController public class HelloController { @GetMapping("/hello/{latency}") public String hello(@PathVariable Long latency) { try { TimeUnit.MILLISECONDS.sleep(latency); } catch (InterruptedException e) { return "Error during thread sleep!"; } return "Hello World!"; } }
Spring Boot Webflux 测试代码如下:
代码清单:spring-boot-analysis/spring-boot-webflux-latency/src/main/java/com/springboot/springbootwebfluxlatency/controller/HelloController.java
@RestController public class HelloController { @GetMapping("/hello/{latency}") public Mono<String> hello(@PathVariable int latency) { return Mono.just("Welcome to reactive ~") .delayElement(Duration.ofMillis(latency)); // 1 } }
这两个服务分别配置不同的端口启动。
3. 压测
我计划以分别以 50 、100 、200 并发压测 1 分钟,查看两个服务的结果,因为 SpringBoot 中 tomcat 如果不做配置,最大线程数是 200 ,笔者这里偷个懒。
注意: 本次压测结果仅供参考。
3.1 50并发
SpringMVC 聚合数据:
SpringMVC JVM :
Spring Boot Webflux 聚合数据:
Spring Boot Webflux JVM :
可以看到,在50并发的情况下, Spring Boot Webflux 的吞吐量甚至还有不如。但是 SpringMVC 的活动线程数飙升到了 69 ,而 Spring Boot Webflux 的线程数则稳定在 36 。
3.2 100并发
SpringMVC 聚合数据:
SpringMVC JVM :
Spring Boot Webflux 聚合数据:
Spring Boot Webflux JVM :
额,这一组测试得出的结论和上面一组基本一致,但是可以明显看到 Spring Boot Webflux 对 CPU 的消耗要小于 SpringMVC 。
3.3 200 并发
SpringMVC 聚合数据:
SpringMVC JVM :
Spring Boot Webflux 聚合数据:
Spring Boot Webflux JVM :
在这组对照中,可以看到 Spring Boot Webflux 的吞吐量是超过了 SpringMVC (虽然超过的比较少),并且 Spring Boot Webflux 对 CPU 的消耗是要比 SpringMVC 小将近一半。
3.4 300 并发
SpringMVC 聚合数据:
SpringMVC JVM :
SpringMVC 响应时间:
Spring Boot Webflux 聚合数据:
Spring Boot Webflux JVM :
Spring Boot Webflux 响应时间:
在这组对照中,可以看出 Spring Boot Webflux 吞吐量超过 SpringMVC 将近三分之一,从时间响应图上也可以看到 Spring Boot Webflux 上涨的幅度是要小于 SpringMVC 的。
4. 小结
首先, Spring Boot Webflux 的 CPU 使用率小于 SpringMVC 这点是我在测试前就已经预料到的,毕竟 Spring Boot Webflux 是非阻塞式的 I/O ,而 SpringMVC 则是阻塞式的, Spring Boot Webflux 的活动线程数是固定的,这就大大的减少了 CPU 在线程中切换的消耗。但是在并发未到 200 之前, Spring Boot Webflux 相比较 SpringMVC 并没有明显的优势,相反还有点不如,这是我没想到的(有哪位朋友知道原因的可以一起交流下),当然,我的实验仅能做一个参考作用,毕竟只进行了一次测试,并未多次测试取平均,偶然性还是相当大的。
相关推荐
Light Security是一个基于jwt的权限控制框架,支持与Spring Boot配合使用,支持Spring MVC与WebFlux;开箱即用,轻量级,代码精简,不到500行代码;功能实用,市面上安全框架常见能力与套路均已具备:支持 RESTful ...
Spring Boot 2 Recipes quickly introduces you to Pivotal's Spring Boot 2 micro-framework, then dives into code snippets on how to apply and integrate Spring Boot 2 with the Spring MVC web framework, ...
带有SOAP客户端的示例Spring Boot App 三个示例Spring Boot应用程序: 一个带有REST端点的Spring Boot应用程序,用于获取依赖于“ Bankleitzahl”的银行信息一个带有SOAP客户端的Spring Boot MVC应用程序1....
什么是 Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发框架. 要深入了解 Spring WebFlux, 首先要了知道 Reactive Stream, 和命令式编程相较而言, 只是另一种编程姿势.
带有Spring Boot(WebFlux)和AWS开发工具包的基本CRUD 使用Spring Boot和AWS开发工具包的简单CRUD。 创建该项目仅用于测试目的。 这用于比较Spring堆栈(MVC和Reactive)
组件Spring BootReact式Web 一个Spring Boot 2.3应用程序,它使用Spring Reactive Web(WebFlux)而不是标准的Web MVC框架来检索数据。 它也以React方式连接到MongoDB数据库。 查看以获取指南整章的简短版本。角...
spring-5-book:Spring 5 Samples(Spring 5案例大全《 Spring 5开发大全》示例源码)涵盖了Spring 5,Spring MVC,Spring WebFlux,Spring Boot和Spring Cloud
Spring Boot 实践折腾记的代码实现package说明:boot学习Spring Boot的文章集合入门Web应用操作数据库序列化API化Spring Boot 实践折腾记(8):极速简化MVCSpring Boot 实践折腾记(9):快速构建 Web API响应式...
该项目包含使用。 Webflux是: 一种非阻塞方法,可以处理少量线程的并发并有效扩展。... backend-blocking-app包含使用Spring MVC编写的阻止服务http://localhost:8091/answer-blocking ,并从external-app调
本教程向您展示如何使用Spring Boot和Kotlin构建一个简单的聊天应用程序。 您将从语法的角度了解使用Kotlin进行服务器端开发的好处。 我们将从最小的应用程序实现开始,然后逐步进行开发,首先,该应用程序将生成并...
Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...
spring boot中文文档,从安装到部署。 I. Spring Boot文件 1.关于文档 2.获得帮助 3.第一步 4.使用Spring Boot 5.了解Spring Boot功能 6.转向生产 7.高级主题 II。入门 8.介绍Spring Boot ...
csrf-spring-webflux-mustache:此存储库包含使用spring boot 2.0,webflux,spring security 5,React性mongodb和mustache模板引擎的示例应用程序:spring security 5,带有胡子的CSRF保护,spring webflux功能路线...
该应用程序展示了如何将Spring 5 Webflux与Spring Security,Web套接字,@ RestContorler,@ Controller,Reactive MongoDB和JWT一起使用。 Spring5仍然是新的。 关于如何在Webflux堆栈中使用Spring Security的...
CVE-2022-22963 复现Demo,A Spring MVC or Spring WebFlux application running on JDK 9+ may be vulnerable to remote code execution (RCE) via data binding. The specific exploit requires the application ...
Charon是通用的Spring Boot工具。 它已经实现了许多功能,其体系结构提供了添加新功能的简便方法。产品特点高度可配置和可扩展Spring 和支持多请求转发映射负载均衡灵活的路径重写支持基于指标异步请求转发认证方式...
Spring启动演示 SpringBoot + SpringCloud + SpringSecurity学习过程中的二进制汇总,沉淀记录下学习历程 1.知识点图谱 所有博文集中发布在个人博客网站: 大致规划的内容包括以下章节,希望能用半年到一年(严重...
• Build Spring-based web applications using Spring MVC and WebSocket • Build Spring web reactive applications with Spring WebFlux • Test Spring applications using Junit 5 • Utilize the new Java 8 ...
bucket4j-spring-boot-starter:Bucket4j的Spring Boot Starter