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
|