spring-project-samples

概述

虚拟线程和webflux的性能对决

环境及配置

压测源码&镜像

压测工具

压测场景case

K6压测

压测脚本

-i:指定请求数量 -u:模拟并发数量 –duration:请求时长定义,例如:60s,1m -e url:指定环境变量url,用于实际场景替换

##### `simple-test.js`脚本说明

import http from ‘k6/http’; import { check } from ‘k6’;

export default function () { const res = http.get(${__ENV.url}); check(res, { ‘is status 200’: (r) => r.status === 200 }); }


##### 压测docker实例
```shell
## 启用虚拟线程实例
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虚拟线程是两种不同的技术,用于解决不同的问题,并具有不同的使用场景。下面是它们之间的对比及使用场景:

两者对比

使用场景对比