- 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
200 lines
5.0 KiB
Markdown
200 lines
5.0 KiB
Markdown
# 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
|