`
6696
  • 浏览: 15308 次
社区版块
存档分类
最新评论

Spring Boot : Webflux 和 MVC 性能对比

 
阅读更多

 

 

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

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

Java代码  收藏代码
  1. @RestController  
  2. public class HelloController {  
  3.   
  4.     @GetMapping("/hello/{latency}")  
  5.     public String hello(@PathVariable Long latency) {  
  6.         try {  
  7.             TimeUnit.MILLISECONDS.sleep(latency);  
  8.         } catch (InterruptedException e) {  
  9.             return "Error during thread sleep!";  
  10.         }  
  11.         return "Hello World!";  
  12.     }  
  13. }  

 Spring Boot Webflux 测试代码如下:

代码清单:spring-boot-analysis/spring-boot-webflux-latency/src/main/java/com/springboot/springbootwebfluxlatency/controller/HelloController.java

Java代码  收藏代码
  1. @RestController  
  2. public class HelloController {  
  3.     @GetMapping("/hello/{latency}")  
  4.     public Mono<String> hello(@PathVariable int latency) {  
  5.         return Mono.just("Welcome to reactive ~")  
  6.                 .delayElement(Duration.ofMillis(latency)); // 1  
  7.     }  
  8. }  

 这两个服务分别配置不同的端口启动。

3. 压测

我计划以分别以 50 、100 、200 并发压测 1 分钟,查看两个服务的结果,因为 SpringBoot 中 tomcat 如果不做配置,最大线程数是 200 ,笔者这里偷个懒。

注意: 本次压测结果仅供参考。

3.1 50并发

SpringMVC 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

SpringMVC JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

可以看到,在50并发的情况下, Spring Boot Webflux 的吞吐量甚至还有不如。但是 SpringMVC 的活动线程数飙升到了 69 ,而 Spring Boot Webflux 的线程数则稳定在 36 。

3.2 100并发

SpringMVC 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

SpringMVC JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

额,这一组测试得出的结论和上面一组基本一致,但是可以明显看到 Spring Boot Webflux 对 CPU 的消耗要小于 SpringMVC 。

3.3 200 并发

SpringMVC 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

SpringMVC JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

在这组对照中,可以看到 Spring Boot Webflux 的吞吐量是超过了 SpringMVC (虽然超过的比较少),并且 Spring Boot Webflux 对 CPU 的消耗是要比 SpringMVC 小将近一半。

3.4 300 并发

SpringMVC 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

SpringMVC JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

SpringMVC 响应时间:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux 聚合数据:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux JVM :

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

Spring Boot Webflux 响应时间:

 

Spring Boot (十六): Webflux 和 MVC 性能对比
 

 

在这组对照中,可以看出 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 并没有明显的优势,相反还有点不如,这是我没想到的(有哪位朋友知道原因的可以一起交流下),当然,我的实验仅能做一个参考作用,毕竟只进行了一次测试,并未多次测试取平均,偶然性还是相当大的。

分享到:
评论

相关推荐

    基于jwt的权限控制框架,支持与Spring Boot配合使用,支持Spring MVC与WebFlux

    Light Security是一个基于jwt的权限控制框架,支持与Spring Boot配合使用,支持Spring MVC与WebFlux;开箱即用,轻量级,代码精简,不到500行代码;功能实用,市面上安全框架常见能力与套路均已具备:支持 RESTful ...

    使用SpringCloud和Spring WebFlux开发的学生作业管理系统服务端,前后端分离项目

    7. **监控与日志**:使用Spring Boot Actuator监控服务状态,集成ELK(Elasticsearch, Logstash, Kibana)或Prometheus+Grafana进行日志收集和分析,以便于故障排查和性能优化。 在实际开发过程中,我们还需要考虑...

    Spring Boot 2 Recipes: A Problem-Solution Approach

    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, ...

    Spring Webflux 响应式编程 (二) - WebFlux编程实战

    五、WebFlux与Web MVC对比 1. **阻塞与非阻塞**:Web MVC基于Servlet API,是阻塞式的,而WebFlux是非阻塞的,更适用于微服务和高并发环境。 2. **灵活性**:WebFlux提供了更多灵活性,可以选择函数式编程或基于...

    spring-webflux实战.zip

    9. **配置与启动**:Spring Boot简化了WebFlux应用的配置和启动,只需要添加相应的依赖和少量配置,就可以快速搭建起一个功能完备的WebFlux应用。 通过这个"spring-webflux实战.zip",你可以学习如何创建、配置、...

    springboot webflux demo

    在Spring Boot的`application.properties`或`application.yml`中,你可以配置WebFlux的应用服务器,如使用Netty或Undertow,并调整相关参数以优化性能。 **总结** SpringBoot WebFlux 提供了一种现代的、反应式的...

    Spring Boot 2精髓带书签目录高清版.pdf

    - 使用Spring MVC或者Spring WebFlux进行RESTful API的开发,Spring Boot 2支持反应式编程模型,提供更好的非阻塞处理能力。 - Thymeleaf、FreeMarker和JSP等视图技术的集成,简化了前端模板的处理。 4. **数据...

    Spring Boot高级.rar

    7. **RESTful API设计**:Spring Boot支持使用Spring MVC来开发RESTful API,包括HTTP方法映射、响应式编程模型(如WebFlux)、JSON序列化等。 8. **安全控制**:Spring Security是Spring Boot默认的安全管理框架,...

    Spring Boot WebChat 网页聊天室

    Spring Boot WebChat 网页聊天室是一款基于Spring Boot框架构建的应用,整合了Spring Security、Spring Data JPA、Thymeleaf以及Spring WebSocket等技术,为用户提供了一个实时的在线聊天平台。下面将详细介绍这些...

    spring webflux使用的详细代码

    Spring WebFlux是Spring Framework 5.0引入的一个全新模块,它是对传统Spring MVC的补充,专注于非阻塞式、反应式编程模型。这个模型特别适用于高并发、低延迟的现代Web应用程序。在这个主题中,我们将深入探讨...

    spring webflux demo

    与传统的基于Servlet的Spring MVC不同,WebFlux旨在优化性能,提高并发性和资源效率,特别适合微服务和高并发场景。 本项目是一个使用Spring WebFlux、MongoDB数据库的小型示例,展示了如何在Java环境中实现基本的...

    spring-boot-2.4.x.zip

    1. Spring Framework 5.3:Spring Boot 2.4.x基于Spring Framework 5.3,提供了更好的性能和API改进,包括反应式编程的支持。 2. Jakarta EE支持:2.4.x版本开始支持Jakarta EE(原Java EE)8,这使得Spring Boot...

    spring-boot-1.5.4.RELEASE

    2. RESTful服务:通过Spring MVC和Spring WebFlux,可以轻松创建RESTful API,支持JSON序列化和反序列化。 3. 消息处理:集成RabbitMQ或Kafka等消息中间件,方便实现异步通信和事件驱动架构。 4. 安全管理:Spring...

    Spring Boot教程.pdf

    Spring Boot 提供了多种 Web 框架,如 Spring MVC、WebFlux 等。 在 Web 实战中,我们可以使用 @RestController 注解来标注控制器类,并使用 @RequestMapping 注解来映射 URL 和方法之间的关系。同时,我们也可以...

    springwebflux的demo

    1. **pom.xml**: Maven配置文件,定义了项目的依赖,包括Spring Boot的父 pom 和Spring WebFlux的相关库。 2. **src/main/java**: 包含源代码,可能有`com.example.webfluxdemo`或类似包结构,包含主应用类(`...

    Spring Boot 2企业应用实战.rar

    本书旨在帮助读者深入理解和掌握Spring Boot 2在实际企业项目中的应用,提升开发效率,实现快速构建高质量的微服务系统。 Spring Boot是Spring框架的扩展,它通过简化配置和自动配置机制,使得开发Spring应用程序变...

    Spring Boot 2精髓.rar

    4. Web开发:使用Spring MVC或WebFlux进行RESTful API开发,以及模板引擎如Thymeleaf的使用。 5. 数据访问:集成JPA或MyBatis进行数据库操作,以及事务管理。 6. Actuator:监控和健康检查的配置,暴露端点以获取...

    Spring Boot介绍内容.zip

    12. **RESTful API设计**:Spring Boot鼓励使用Spring MVC和Spring WebFlux构建RESTful API,支持JSON、XML等多种数据格式。 在实际开发中,Spring Boot可以结合Spring Cloud构建大型分布式系统,如服务注册与发现...

    spring Boot 2精髓.rar

    这个“Spring Boot 2精髓”压缩包显然包含了一份关于Spring Boot 2核心概念和技术的详细指南,可能是电子书的形式,具有高清质量和方便的目录书签。 Spring Boot的核心特性包括自动配置、起步依赖和嵌入式Web服务器...

Global site tag (gtag.js) - Google Analytics