`
白马探
  • 浏览: 15181 次
社区版块
存档分类
最新评论

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

@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 聚合数据:

 

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

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

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

    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 提供了一种现代的、反应式的...

    springwebflux的demo

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

    带有肥皂客户端的其余端点:两个使用SOAP客户端的Spring Boot应用程序:一个MVC和一个WebFlux

    带有SOAP客户端的示例Spring Boot App 三个示例Spring Boot应用程序: 一个带有REST端点的Spring Boot应用程序,用于获取依赖于“ Bankleitzahl”的银行信息一个带有SOAP客户端的Spring Boot MVC应用程序1....

    Spring Boot高级.rar

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

    管理系统系列--JetLinks 基于Java8,Spring Boot 2.x ,WebFlux,Netty,Ve.zip

    【标题】"管理系统系列--JetLinks 基于Java8,Spring Boot 2.x ,WebFlux,Netty,Ve.zip"所涉及的核心技术主要包括Java 8、Spring Boot 2.x、WebFlux、Netty以及Ve框架。这些是构建高性能、可扩展的现代Web应用的关键...

    使用 Spring Boot 2.0 + WebFlux 实现 RESTful API功能

    在传统的基于 Servlet 的 Web 开发中,如 Spring MVC,每个请求都会分配一个线程,而 WebFlux 利用非阻塞 I/O 和事件驱动模型,可以更有效地处理大量并发请求,降低了系统的资源消耗。 **Reactive Streams** ...

    Spring Boot安全管理

    Spring Boot安全管理是Spring Boot框架中一个至关重要的部分,它利用Spring Security来确保应用程序的安全性和访问控制。Spring Security是一个强大的安全框架,能够处理认证(Authentication)和授权...

    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介绍内容.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是Spring框架的扩展,它通过简化配置和自动配置机制,使得开发Spring应用程序变...

    spring Boot 2精髓.rar

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

    spring webflux demo

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

    Spring Boot WebChat 网页聊天室

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

Global site tag (gtag.js) - Google Analytics