Spring Boot (十六): Webflux 和 MVC 性能对比
1. 前言
最近在网上看到,很多人都讲 Spring Boot Webflux 要超过 SpringMVC ,感觉在高并发的场景下, Spring Boot Webflux 简直就是银弹。
本文将通过最简单的方式,来简单测试对比一下 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!";
}
}
COPY
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
}
}
COPY
这两个服务分别配置不同的端口启动。
3. 压测
我计划以分别以 50 、100 、200 并发压测 1 分钟,查看两个服务的结果,因为 SpringBoot 中 tomcat 如果不做配置,最大线程数是 200 ,笔者这里偷个懒。
注意: 本次压测结果仅供参考。
3.1 50并发
SpringMVC 聚合数据: