# spring-cloud-gateway-benchmark **Repository Path**: jxd134/spring-cloud-gateway-benchmark ## Basic Information - **Project Name**: spring-cloud-gateway-benchmark - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-07 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Cloud Gateway 性能测试项目 ## 项目简介 对比 Spring Cloud Gateway 两种实现方式的性能差异: - **WebFlux (Reactive)**: 基于 Netty 的非阻塞响应式架构 - **WebMVC (Servlet)**: 基于 Tomcat 的传统 Servlet 架构 ## 技术栈 - **Spring Boot**: 4.0.0 - **Spring Cloud**: 2025.1.0 - **Spring Cloud Gateway**: 5.0.0 - `spring-cloud-starter-gateway-server-webflux` (Reactive) - `spring-cloud-starter-gateway-server-webmvc` (Servlet) - **Java**: 25 (Amazon Corretto 25.0.1) - **容器**: Docker with Amazon Corretto 25.0.1 ## 部署架构 ### 网关服务 | 主机 | 服务 | 端口 | 内存 | |------|------|------|------| | 36.134.190.27 | Gateway WebFlux | 60001 | 2GB | | 36.134.190.27 | Gateway WebMVC | 60000 | 2GB | ### 后端服务(双实例部署) | 主机 | 服务 | 端口 | 内存 | 说明 | |------|------|------|------|------| | 36.134.190.207 | Service-A 实例1 | 8081 | 2GB | Service A 主实例 | | 36.134.190.207 | Service-B 实例1 | 8083 | 2GB | Service B 主实例 | | 36.134.190.142 | Service-B 实例2 | 8084 | 2GB | Service B 备实例 | | 36.134.190.142 | Service-C 实例1 | 8085 | 2GB | Service C 主实例 | | 36.134.190.95 | Service-A 实例2 | 8082 | 2GB | Service A 备实例 | | 36.134.190.95 | Service-C 实例2 | 8086 | 2GB | Service C 备实例 | ### 负载均衡配置 每个服务都有两个实例,通过网关的 RoundRobin 负载均衡器进行流量分发: - **Service-A**: 207:8081 ⇄ 95:8082 - **Service-B**: 207:8083 ⇄ 142:8084 - **Service-C**: 142:8085 ⇄ 95:8086 ### 压测客户端 | 主机 | 服务 | 内存 | |------|------|------| | 36.134.190.190 | Pressure Test Client | 2GB | ## 快速开始 ### 部署服务 在 WSL 中执行部署脚本: ```bash # 编译并部署所有服务 bash deploy-dual-instances.sh # 测试负载均衡 bash test-load-balancing.sh ``` 详细部署说明:**[DEPLOYMENT-GUIDE.md](DEPLOYMENT-GUIDE.md)** ### 测试网关 ```bash # WebFlux Gateway curl http://36.134.190.27:60001/service-a/api/hello # WebMVC Gateway curl http://36.134.190.27:60000/service-a/api/hello ``` ## 性能测试 ### 运行性能测试 ```bash # 基础用法:测试 WebFlux, 8 线程, 300 秒, 中等压测强度 bash run-performance-test.sh webflux 8 300 medium # 完整参数说明 bash run-performance-test.sh [gateway_type] [threads] [duration] [load_level] 参数说明: gateway_type : webflux 或 webmvc (默认: webflux) threads : 并发线程数 (默认: 8) duration : 压测时长 (秒) (默认: 300) load_level : 压测强度 light/medium/heavy (默认: medium) 压测强度说明: light : 轻压测,连接数 = 线程数 × 4 (用于快速验证) medium : 中等压测,连接数 = 线程数 × 25 (推荐) heavy : 重压测,连接数 = 线程数 × 125 (充分压测) 示例: # 轻压测 bash run-performance-test.sh webflux 4 60 light # 标准中等压测(推荐) bash run-performance-test.sh webflux 8 300 medium # 重压测 bash run-performance-test.sh webmvc 16 600 heavy ``` ### 分析性能数据 改进的分析脚本支持三种模式: ```bash # 方式1: 单个测试分析 bash analyze-performance-data.sh ./performance-results/webflux_t8_d300_20251208_215602 # 方式2: 两个测试对比分析 bash analyze-performance-data.sh compare \ ./performance-results/webflux_t8_d300_20251208_215602 \ ./performance-results/webmvc_t8_d300_20251208_223704 # 方式3: 自动对比最新的 WebFlux 和 WebMVC 测试 bash analyze-performance-data.sh auto ``` 详细分析说明:**[ANALYSIS-SCRIPT-GUIDE.md](ANALYSIS-SCRIPT-GUIDE.md)** ### WRK 调优指南 了解如何合理设置线程数和连接数:**[WRK-TUNING-GUIDE.md](WRK-TUNING-GUIDE.md)** 关键要点: - 线程数应该接近 CPU 核心数(通常 8-16) - 连接数应该远大于线程数(至少 4-25 倍) - 不应该设置 线程数 = 连接数(无法充分压测) ### 收集性能指标 两个网关自动收集性能指标: - **WRK 压测结果**: 吞吐量、延迟分布、错误统计 - **HTTP 指标**: 请求数、响应时间统计 - **JVM 指标**: 堆内存、线程数、GC 统计 - **CPU 指标**: 进程和系统 CPU 使用率 - **容器资源**: CPU、内存、I/O 统计 ## 项目文件 ```text springboot-gateway-mvc/ ├── gateway-webflux/ # WebFlux 网关 ├── gateway-webmvc/ # WebMVC 网关 ├── service-a/b/c/ # 后端服务 ├── deploy-dual-instances.sh # 部署脚本 ├── test-load-balancing.sh # 负载均衡测试 ├── analyze-performance-data.sh # 性能数据分析 ├── DEPLOYMENT-GUIDE.md # 部署指南 └── README.md # 本文档 ``` ## License MIT License