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

5.0 KiB
Raw Permalink Blame 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

# 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 查看性能仪表板。

常见问题排查

高延迟

  1. 检查数据库慢查询日志
  2. 检查 Redis 命中率
  3. 检查上游 API 响应时间
  4. 检查连接池饱和度

高错误率

  1. 检查速率限制触发情况
  2. 检查上游 API 错误率
  3. 检查认证失败率
  4. 检查配额耗尽情况

内存泄漏

  1. 检查 go-cache 缓存大小
  2. 检查 goroutine 数量
  3. 检查数据库连接泄漏
  4. 使用 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