Files
tokens-reef/deploy/performance-testing/README.md

200 lines
5.0 KiB
Markdown
Raw Normal View History

# 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