Spring WebFlux是Spring Framework的一个模块,它提供了一种基于响应式编程模型的Web开发框架。
Spring WebFlux支持两种编程模型,分别是注解驱动和函数式编程。在注解驱动模型中,可以使用类似于Spring MVC的注解来定义请求处理方法,并利用Reactor提供的操作符和流式处理方式来处理请求和响应。在函数式编程模型中,可以使用一组函数式接口来定义路由和处理函数,以及利用Flux和Mono来处理异步数据流。
importhttpfrom'k6/http';import{check}from'k6';exportdefaultfunction(){constres=http.get(`${__ENV.url}`);check(res,{'is status 200':(r)=>r.status===200});}
压测docker实例
1
2
3
4
5
## 启用虚拟线程实例docker run --name virtualthread-sample-vt -p 8081:8080 -e SPRING_EXECUTOR=virtual -d guanyangsunlight/spring-project-samples:virtualthread-sample-0.0.1-SNAPSHOT
## 启用webflux实例docker run --name webflux-sample -p 8083:8080 -d guanyangsunlight/spring-project-samples:webflux-sample-0.0.1-SNAPSHOT
K6压测结果
QPS对比
Avg Latency对比
详细数据
Case
QPS
Avg Latency
P95
Spring Boot虚拟线程,-u 200
1620.869685/s
123.09ms
149.42ms
Spring Boot虚拟线程,-u 400
2634.599143/s
151.55ms
198.37ms
Spring Boot虚拟线程,-u 600
3136.075961/s
186.44ms
256.03ms
Spring Boot虚拟线程,-u 800
3780.654388/s
210.28ms
294.79ms
Spring Boot虚拟线程,-u 1000
4250.384928/s
234.17ms
319.92ms
Spring Boot虚拟线程,-u 1200
4479.450088/s
266.15ms
370.17ms
Spring webflux响应式,-u 200
1826.774964/s
109.22ms
127.25ms
Spring webflux响应式,-u 400
3516.072783/s
113.35ms
138.09ms
Spring webflux响应式,-u 600
4868.593872/s
122.69ms
160.59ms
Spring webflux响应式,-u 800
5852.713635/s
136.14ms
182.87ms
Spring webflux响应式,-u 1000
5994.725404/s
166.09ms
255.77ms
Spring webflux响应式,-u 1200
6878.047424/s
173.48ms
278.69ms
总结
Spring WebFlux和JDK虚拟线程是两种不同的技术,用于解决不同的问题,并具有不同的使用场景。下面是它们之间的对比及使用场景: