为什么要做这个测评呢?
因为Spring官方推出Reactive技术栈已经很久了,通过它官网的介绍我们知道Reactive技术栈是非阻塞的,理论上应该比传统的Spring MVC或SpringBoot MVC性能好。
但是能好多少?很遗憾Spring官网并没有给出量化的指标。
![8a2d57f7e9ce28e23aa282f26df0635e.png](https://i-blog.csdnimg.cn/blog_migrate/9d678bc43e38c10ac2ef9e52fc94a558.jpeg)
所以我们打算出一系列测评视频,来分别测Reactive技术栈的WebFlux、R2dbc……跟原来的Servlet技术栈里面对应的Spring MVC、Spring Data Jpa相比,性能提升的具体量化的指标。
本次我们先测WebFlux,看它比MVC具体提升了多少。
测试项目
因为WebFlux是纯web层面的,所以我们就测试两个项目:
- 返回字符串
- 返回Json
注:每个项目各测三次
测试工具
因为Spring在官网上介绍Reactive的特点为高吞吐量,低延时,而WebFlux作为Reactive技术栈之一,自然具备这些特性,要测试高吞吐量,自然要用一些工具模拟高并发,本次我们依然用压力测试工具wrk来模拟高并发场景。
- 测试工具:Wrk——超高性能的命令行压测工具
- 测试命令:wrk –t12 –c400 –d10s
测试的技术栈及版本
- SpringBoot MVC & SpringBoot WebFlux 2.3.1
- Jdk:Alibaba Dragonwell 11.0.7
测试环境
- 操作系统:Ubuntu Server 18.04 on VmVare
- 配置:4核/8G
测试代码
SpringBoot MVC版:
@RestController
@RequestMapping("")
public class IndexController {
@RequestMapping("")
public Object Index(){
return "Hello From SpringBoot MVC";
}
@RequestMapping("json")
public Object json(){
var temp = new HashMap<String, String>();
temp.put("hello", "SpringBoot MVC");
return temp;
}
}
SpringBoot WebFlux版:
@RestController
@RequestMapping
public class IndexController {
@RequestMapping
public Mono<String> index() {
return Mono.just("Hello From SpringBoot WebFlux");
}
@RequestMapping("json")
public Mono<Object> json() {
var map = new HashMap<String, String>();
map.put("hello", "SpringBoot WebFlux");
return Mono.just(map);
}
}
测试结果
![4afa2b1b55385904155395bedecd4938.png](https://i-blog.csdnimg.cn/blog_migrate/29d426dde30f3c01989388b1f104d43d.png)
![dc9923771bb81f28d502b91597ecced1.png](https://i-blog.csdnimg.cn/blog_migrate/af1b3bce01f9c91f1136a3ef895292b4.jpeg)
结果点评
虽然比起原来的Spring MVC(SpringBoot MVC)性能有所提升,但是性能提升并不大
同时跟jvm世界里同样是基于netty的异步非阻塞web框架——Vert.x相比,现在的WebFlux性能跟Vert.x还差很远
WebFlux要走的路还很长……
配套视频
本次测评全程都用视频录下来了,想看视频的朋友请点击
https://www.bilibili.com/video/BV1u54y1z7MW/www.bilibili.com