Files
Developer 349d783fd1 refactor: clean up project structure
- 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
2026-04-06 23:36:03 +08:00

200 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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