- Remove old review reports (keep latest only) - Move docs/ to deploy/docs-backup/ - Move performance-testing/ to deploy/ - Clean up test output files - Organize root directory
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
# 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. 配置环境
# 复制配置模板
cp config.example.js config.js
# 编辑配置
vim config.js
3. 运行测试
# 基线测试
./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 查看性能仪表板。
常见问题排查
高延迟
- 检查数据库慢查询日志
- 检查 Redis 命中率
- 检查上游 API 响应时间
- 检查连接池饱和度
高错误率
- 检查速率限制触发情况
- 检查上游 API 错误率
- 检查认证失败率
- 检查配额耗尽情况
内存泄漏
- 检查 go-cache 缓存大小
- 检查 goroutine 数量
- 检查数据库连接泄漏
- 使用
go tool pprof进行分析
性能回归预防
在 CI/CD 中集成性能测试:
# .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