# Sub2API 性能压测套件 本目录包含 Sub2API 的完整性能测试套件,使用 k6 进行负载测试。 ## 目录结构 ``` perf-tests/ ├── README.md # 本文件 ├── common/ # 共享模块 │ ├── scenarios.js # 测试场景配置 │ ├── utils.js # 工具函数 │ └── thresholds.js # 性能阈值定义 ├── scripts/ │ ├── baseline-test.sh # 基线测试脚本 │ ├── load-test.sh # 负载测试脚本 │ ├── stress-test.sh # 压力测试脚本 │ └── soak-test.sh # 浸泡测试脚本 ├── test-suites/ │ ├── auth.test.js # 认证接口测试 │ ├── gateway.test.js # Gateway API 测试 │ ├── api-keys.test.js # API Key 管理测试 │ ├── admin.test.js # 管理后台测试 │ └── health.test.js # 健康检查测试 └── results/ # 测试结果输出目录 ``` ## 快速开始 ### 1. 安装 k6 ```bash # macOS brew install k6 # Linux sudo gpg -k sudo gpg --armor --export | sudo apt-key add - echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list sudo apt-get update sudo apt-get install k6 # Windows (使用 Chocolatey) choco install k6 ``` ### 2. 配置环境 ```bash # 复制配置模板 cp config.example.js config.js # 编辑配置 vim config.js ``` ### 3. 运行测试 ```bash # 基线测试 ./scripts/baseline-test.sh # 负载测试 ./scripts/load-test.sh # 压力测试 ./scripts/stress-test.sh # 浸泡测试 ./scripts/soak-test.sh ``` ## 测试类型说明 ### 基线测试 (Baseline) - **目标**: 建立性能基线,验证系统在正常负载下的表现 - **持续时间**: 5 分钟 - **虚拟用户**: 10-50 VU - **SLA**: P95 延迟 < 500ms,错误率 < 1% ### 负载测试 (Load) - **目标**: 验证系统在预期峰值负载下的性能 - **持续时间**: 10 分钟 - **虚拟用户**: 50-200 VU 逐步增加 - **SLA**: P95 延迟 < 1s,错误率 < 2% ### 压力测试 (Stress) - **目标**: 找出系统的性能边界和断点 - **持续时间**: 15 分钟 - **虚拟用户**: 200-1000 VU 逐步增加 - **SLA**: 无硬性要求,记录断点 ### 浸泡测试 (Soak) - **目标**: 验证长时间运行的稳定性 - **持续时间**: 2-8 小时 - **虚拟用户**: 稳定在基线负载的 70% - **SLA**: 内存无泄漏,无性能退化 ## 关键性能指标 ### Core Web Vitals (前端) | 指标 | 良好 | 需要改进 | 差 | |------|------|----------|-----| | LCP | < 2.5s | 2.5-4s | > 4s | | FID | < 100ms | 100-300ms | > 300ms | | CLS | < 0.1 | 0.1-0.25 | > 0.25 | ### API 性能目标 | 接口类型 | P50 | P95 | P99 | 目标 TPS | |----------|-----|-----|-----|----------| | 健康检查 | < 10ms | < 50ms | < 100ms | 5000 | | 认证 | < 50ms | < 200ms | < 500ms | 1000 | | Gateway API | < 200ms | < 1000ms | < 3000ms | 500 | | Admin API | < 100ms | < 500ms | < 1000ms | 200 | ### 基础设施指标 | 资源 | 警戒线 | 危险线 | |------|--------|--------| | CPU 使用率 | 70% | 85% | | 内存使用率 | 75% | 90% | | PostgreSQL 连接数 | 80% | 95% | | Redis 连接数 | 80% | 95% | | 磁盘 IO | 70% | 85% | ## 监控集成 ### Prometheus 指标端点 - 端点: `GET /metrics` - 关键指标: - `sub2api_http_request_duration_seconds` - HTTP 请求延迟 - `sub2api_gateway_latency_seconds` - Gateway 延迟 - `sub2api_db_connections` - 数据库连接池 - `sub2api_redis_connections` - Redis 连接池 - `sub2api_rate_limit_hits_total` - 速率限制命中 ### Grafana Dashboard 导入 `deploy/monitoring/grafana/dashboards/sub2api-performance.json` 查看性能仪表板。 ## 常见问题排查 ### 高延迟 1. 检查数据库慢查询日志 2. 检查 Redis 命中率 3. 检查上游 API 响应时间 4. 检查连接池饱和度 ### 高错误率 1. 检查速率限制触发情况 2. 检查上游 API 错误率 3. 检查认证失败率 4. 检查配额耗尽情况 ### 内存泄漏 1. 检查 go-cache 缓存大小 2. 检查 goroutine 数量 3. 检查数据库连接泄漏 4. 使用 `go tool pprof` 进行分析 ## 性能回归预防 在 CI/CD 中集成性能测试: ```yaml # .github/workflows/performance.yml name: Performance Tests on: push: branches: [main, develop] schedule: - cron: '0 2 * * *' # 每日凌晨执行 jobs: performance: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup k6 run: | sudo gpg -k sudo gpg --armor --export | sudo apt-key add - echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list sudo apt-get update sudo apt-get install k6 - name: Run Baseline Test run: ./scripts/baseline-test.sh - name: Upload Results uses: actions/upload-artifact@v4 with: name: k6-results path: results/*.json ``` ## 联系方式 性能问题: 联系 SRE 团队或提交 Issue