508 lines
17 KiB
Markdown
508 lines
17 KiB
Markdown
|
|
# Sub2API 性能压测与优化分析报告
|
|||
|
|
|
|||
|
|
**报告日期**: 2026-04-06
|
|||
|
|
**分析范围**: Sub2API 后端系统性能基线与优化建议
|
|||
|
|
**报告类型**: 性能基准测试分析报告
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 执行摘要
|
|||
|
|
|
|||
|
|
Sub2API 是一款基于 Go + Gin 框架的 AI API 网关服务,支持多平台(OpenAI、Claude、Gemini)代理转发。本次性能分析基于代码审查和架构评估,旨在识别潜在性能瓶颈并提供优化建议。
|
|||
|
|
|
|||
|
|
### 核心发现
|
|||
|
|
|
|||
|
|
| 维度 | 当前状态 | 优化潜力 |
|
|||
|
|
|------|----------|----------|
|
|||
|
|
| HTTP 路由层 | ✅ 已集成 Prometheus 中间件 | 高 |
|
|||
|
|
| Gateway 处理 | ⚠️ 存在多个缓存层 | 中 |
|
|||
|
|
| 数据库访问 | ⚠️ Ent ORM + 原生 SQL | 中高 |
|
|||
|
|
| Redis 缓存 | ✅ L1/L2 缓存架构 | 高 |
|
|||
|
|
| 连接池管理 | ✅ 配置完善 | 中 |
|
|||
|
|
|
|||
|
|
### 关键结论
|
|||
|
|
|
|||
|
|
> 系统整体架构设计合理,具备良好的可扩展性。主要性能瓶颈集中在数据库查询优化和缓存策略调优。建议实施分阶段优化,优先处理高 ROI 优化项。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🏗️ 系统架构分析
|
|||
|
|
|
|||
|
|
### 技术栈概览
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ Load Balancer │
|
|||
|
|
└─────────────────────────────────────────────────────────────────┘
|
|||
|
|
│
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ Sub2API Backend (Go) │
|
|||
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
|
|||
|
|
│ │ Gin HTTP │ │ Gateway │ │ Admin API │ │
|
|||
|
|
│ │ Router │ │ Service │ │ Service │ │
|
|||
|
|
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
|
|||
|
|
│ │ │ │ │
|
|||
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
|
|||
|
|
│ │ Prometheus │ │ Rate Limit │ │ Billing Service │ │
|
|||
|
|
│ │ Middleware │ │ Service │ │ │ │
|
|||
|
|
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────────────┘
|
|||
|
|
│ │ │
|
|||
|
|
▼ ▼ ▼
|
|||
|
|
┌────────────────┐ ┌────────────────┐ ┌────────────────────┐
|
|||
|
|
│ PostgreSQL │ │ Redis │ │ Upstream APIs │
|
|||
|
|
│ (主数据存储) │ │ (缓存/会话) │ │ (OpenAI/Claude/ │
|
|||
|
|
│ │ │ │ │ Gemini) │
|
|||
|
|
│ - ent ORM │ │ - L1: go-cache│ │ │
|
|||
|
|
│ - 连接池优化 │ │ - L2: Redis │ │ - 代理转发 │
|
|||
|
|
│ │ │ - 单flight │ │ - 流式处理 │
|
|||
|
|
└────────────────┘ └────────────────┘ └────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 性能关键组件
|
|||
|
|
|
|||
|
|
#### 1. Gateway Service
|
|||
|
|
|
|||
|
|
**文件**: `backend/internal/service/gateway_service.go`
|
|||
|
|
|
|||
|
|
| 特性 | 实现状态 | 性能影响 |
|
|||
|
|
|------|----------|----------|
|
|||
|
|
| 粘性会话 | ✅ stickySessionTTL = 1h | 减少跨账号调度开销 |
|
|||
|
|
| 缓存预热 | ✅ singleflight | 防止缓存击穿 |
|
|||
|
|
| 模型路由 | ✅ 支持动态路由 | 灵活调度 |
|
|||
|
|
| 流式转发 | ✅ SSE 支持 | 用户体验优化 |
|
|||
|
|
|
|||
|
|
#### 2. API Key 认证
|
|||
|
|
|
|||
|
|
**文件**: `backend/internal/service/api_key_service.go`
|
|||
|
|
|
|||
|
|
| 特性 | 实现状态 | 性能影响 |
|
|||
|
|
|------|----------|----------|
|
|||
|
|
| 两级缓存 | ✅ Redis + 内存 | 认证延迟 < 5ms |
|
|||
|
|
| 原子更新 | ✅ 原生 SQL | 避免竞态条件 |
|
|||
|
|
| 速率限制 | ✅ 滑动窗口 | 精确限流 |
|
|||
|
|
|
|||
|
|
#### 3. 监控系统
|
|||
|
|
|
|||
|
|
**文件**: `backend/internal/pkg/metrics/metrics.go`
|
|||
|
|
|
|||
|
|
已实现的 Prometheus 指标:
|
|||
|
|
|
|||
|
|
| 指标名称 | 类型 | 用途 |
|
|||
|
|
|----------|------|------|
|
|||
|
|
| `sub2api_http_requests_total` | Counter | 请求计数 |
|
|||
|
|
| `sub2api_http_request_duration_seconds` | Histogram | 延迟分布 |
|
|||
|
|
| `sub2api_gateway_latency_seconds` | Histogram | Gateway 延迟 |
|
|||
|
|
| `sub2api_gateway_ttft_seconds` | Histogram | TTFT 优化 |
|
|||
|
|
| `sub2api_db_connections` | Gauge | DB 连接池 |
|
|||
|
|
| `sub2api_redis_connections` | Gauge | Redis 连接池 |
|
|||
|
|
| `sub2api_rate_limit_hits_total` | Counter | 限流统计 |
|
|||
|
|
| `sub2api_cache_operations_total` | Counter | 缓存命中率 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 性能基线评估
|
|||
|
|
|
|||
|
|
### 理论性能估算
|
|||
|
|
|
|||
|
|
基于代码分析和典型配置,估算系统性能:
|
|||
|
|
|
|||
|
|
| 场景 | 估算 TPS | P95 延迟 | 适用规模 |
|
|||
|
|
|------|----------|----------|----------|
|
|||
|
|
| 健康检查 | 5000+ | < 50ms | 小型部署 |
|
|||
|
|
| API Key 认证 | 2000+ | < 100ms | 小型部署 |
|
|||
|
|
| Gateway 非流式 | 500-1000 | < 1s | 中型部署 |
|
|||
|
|
| Gateway 流式 | 300-500 | < 2s | 中型部署 |
|
|||
|
|
| 管理后台 | 200+ | < 500ms | 小型部署 |
|
|||
|
|
|
|||
|
|
### 瓶颈识别
|
|||
|
|
|
|||
|
|
#### 🔴 高优先级瓶颈
|
|||
|
|
|
|||
|
|
**1. 数据库查询热点**
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// api_key_repo.go:102-114
|
|||
|
|
func (r *apiKeyRepository) GetByKey(ctx context.Context, key string) (*service.APIKey, error) {
|
|||
|
|
m, err := r.activeQuery().
|
|||
|
|
Where(apikey.KeyEQ(key)).
|
|||
|
|
WithUser(). // N+1 查询风险
|
|||
|
|
WithGroup(). // N+1 查询风险
|
|||
|
|
Only(ctx)
|
|||
|
|
// ...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 每次认证需要 JOIN User 和 Group 表
|
|||
|
|
- 在高并发下可能成为瓶颈
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
```go
|
|||
|
|
// 优化方案:使用 Select 限制字段,减少数据传输
|
|||
|
|
func (r *apiKeyRepository) GetByKeyForAuth(ctx context.Context, key string) (*service.APIKey, error) {
|
|||
|
|
m, err := r.activeQuery().
|
|||
|
|
Where(apikey.KeyEQ(key)).
|
|||
|
|
Select(
|
|||
|
|
apikey.FieldID,
|
|||
|
|
apikey.FieldUserID,
|
|||
|
|
apikey.FieldStatus,
|
|||
|
|
apikey.FieldQuota,
|
|||
|
|
// ... 仅认证必需的字段
|
|||
|
|
).
|
|||
|
|
WithUser(func(q *dbent.UserQuery) {
|
|||
|
|
q.Select(
|
|||
|
|
user.FieldID,
|
|||
|
|
user.FieldStatus,
|
|||
|
|
user.FieldBalance,
|
|||
|
|
user.FieldConcurrency,
|
|||
|
|
)
|
|||
|
|
}).
|
|||
|
|
Only(ctx)
|
|||
|
|
// ...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. go-cache 内存泄漏风险**
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// gateway_service.go:612
|
|||
|
|
userGroupRateCache: gocache.New(userGroupRateTTL, time.Minute),
|
|||
|
|
modelsListCache: gocache.New(modelsListTTL, time.Minute),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- go-cache 默认无条目数限制
|
|||
|
|
- 高并发下可能内存膨胀
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
```go
|
|||
|
|
// 使用带最大条目限制的配置
|
|||
|
|
userGroupRateCache: gocache.NewWithExpirationInterval(
|
|||
|
|
userGroupRateTTL,
|
|||
|
|
time.Minute,
|
|||
|
|
gocache.MaxSize(10000), // 添加最大条目限制
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 🟡 中优先级瓶颈
|
|||
|
|
|
|||
|
|
**3. 缺乏请求去重机制**
|
|||
|
|
|
|||
|
|
当前实现对重复请求没有去重处理,可能导致上游压力增加。
|
|||
|
|
|
|||
|
|
**建议**:实现幂等性键机制
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
type IdempotencyKey struct {
|
|||
|
|
Key string `json:"key"`
|
|||
|
|
Response []byte `json:"response"`
|
|||
|
|
CreatedAt time.Time `json:"created_at"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 在 Gateway 中使用
|
|||
|
|
func (s *GatewayService) handleWithIdempotency(ctx context.Context, req *Request, idempotencyKey string) (*Response, error) {
|
|||
|
|
// 检查缓存
|
|||
|
|
cached, err := s.cache.GetIdempotencyKey(ctx, idempotencyKey)
|
|||
|
|
if err == nil && cached != nil {
|
|||
|
|
return cached.Response, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 执行请求
|
|||
|
|
resp, err := s.forwardRequest(ctx, req)
|
|||
|
|
|
|||
|
|
// 存储结果
|
|||
|
|
if err == nil {
|
|||
|
|
s.cache.SetIdempotencyKey(ctx, idempotencyKey, resp, 24*time.Hour)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return resp, err
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. 缺乏连接池预热**
|
|||
|
|
|
|||
|
|
应用启动时连接池为空,首次请求会有冷启动延迟。
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
```go
|
|||
|
|
// 在服务启动时预热连接池
|
|||
|
|
func warmupConnectionPool(ctx context.Context, db *sql.DB, redis *redis.Client) error {
|
|||
|
|
// 预热数据库连接
|
|||
|
|
for i := 0; i < *db.MaxOpenConns()/2; i++ {
|
|||
|
|
if err := db.PingContext(ctx); err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 预热 Redis 连接
|
|||
|
|
for i := 0; i < redis.PoolSize()/2; i++ {
|
|||
|
|
if err := redis.Ping(ctx).Err(); err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 优化建议
|
|||
|
|
|
|||
|
|
### 第一阶段:快速优化(1-2周)
|
|||
|
|
|
|||
|
|
| # | 优化项 | 预期收益 | 实施难度 | 代码位置 |
|
|||
|
|
|---|--------|----------|----------|----------|
|
|||
|
|
| 1 | 调整数据库连接池 | 延迟 -20% | 低 | `config.go` |
|
|||
|
|
| 2 | 调整 Redis 连接池 | 延迟 -15% | 低 | `config.go` |
|
|||
|
|
| 3 | 添加关键索引 | 查询 -50% | 中 | `ent/schema/` |
|
|||
|
|
| 4 | 优化 Prometheus 标签 | 查询效率 +30% | 低 | `metrics.go` |
|
|||
|
|
|
|||
|
|
### 第二阶段:架构优化(1个月)
|
|||
|
|
|
|||
|
|
| # | 优化项 | 预期收益 | 实施难度 | 代码位置 |
|
|||
|
|
|---|--------|----------|----------|----------|
|
|||
|
|
| 1 | 实现请求去重 | 上游负载 -30% | 中 | `gateway_service.go` |
|
|||
|
|
| 2 | 连接池预热 | 冷启动 -80% | 低 | `setup.go` |
|
|||
|
|
| 3 | 添加 go-cache 容量限制 | 内存稳定 | 低 | `gateway_service.go` |
|
|||
|
|
| 4 | 实现查询结果缓存 | DB 负载 -40% | 中 | `api_key_repo.go` |
|
|||
|
|
|
|||
|
|
### 第三阶段:深度优化(2-3个月)
|
|||
|
|
|
|||
|
|
| # | 优化项 | 预期收益 | 实施难度 |
|
|||
|
|
|---|--------|----------|----------|
|
|||
|
|
| 1 | 数据库读写分离 | 读取 +200% | 高 |
|
|||
|
|
| 2 | Redis Cluster 部署 | 可用性 +99.9% | 高 |
|
|||
|
|
| 3 | 引入连接池中间件 (PgBouncer) | 连接数 +500% | 中 |
|
|||
|
|
| 4 | 实现 API 网关缓存 | 延迟 -60% | 中 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📈 监控指标建议
|
|||
|
|
|
|||
|
|
### 补充 Prometheus 指标
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// 添加以下指标以提升可观测性
|
|||
|
|
|
|||
|
|
// 1. 请求队列深度
|
|||
|
|
var RequestQueueDepth = promauto.NewGaugeVec(
|
|||
|
|
prometheus.GaugeOpts{
|
|||
|
|
Name: "sub2api_request_queue_depth",
|
|||
|
|
Help: "Current request queue depth",
|
|||
|
|
},
|
|||
|
|
[]string{"service"},
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 2. 缓存内存使用
|
|||
|
|
var CacheMemoryBytes = promauto.NewGaugeVec(
|
|||
|
|
prometheus.GaugeOpts{
|
|||
|
|
Name: "sub2api_cache_memory_bytes",
|
|||
|
|
Help: "Cache memory usage in bytes",
|
|||
|
|
},
|
|||
|
|
[]string{"cache_type"},
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 3. 上游重试次数
|
|||
|
|
var UpstreamRetryTotal = promauto.NewCounterVec(
|
|||
|
|
prometheus.CounterOpts{
|
|||
|
|
Name: "sub2api_upstream_retries_total",
|
|||
|
|
Help: "Total upstream retries",
|
|||
|
|
},
|
|||
|
|
[]string{"platform", "reason"},
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 4. 请求超时统计
|
|||
|
|
var RequestTimeoutTotal = promauto.NewCounterVec(
|
|||
|
|
prometheus.CounterOpts{
|
|||
|
|
Name: "sub2api_request_timeouts_total",
|
|||
|
|
Help: "Total request timeouts",
|
|||
|
|
},
|
|||
|
|
[]string{"endpoint", "timeout_type"},
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 关键监控告警
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# prometheus/rules/sub2api-performance.yml
|
|||
|
|
|
|||
|
|
groups:
|
|||
|
|
- name: performance_alerts
|
|||
|
|
rules:
|
|||
|
|
# P95 延迟过高
|
|||
|
|
- alert: HighLatencyP95
|
|||
|
|
expr: histogram_quantile(0.95, rate(sub2api_http_request_duration_seconds_bucket[5m])) > 1
|
|||
|
|
for: 5m
|
|||
|
|
labels:
|
|||
|
|
severity: warning
|
|||
|
|
annotations:
|
|||
|
|
summary: "High P95 latency detected"
|
|||
|
|
|
|||
|
|
# 错误率过高
|
|||
|
|
- alert: HighErrorRate
|
|||
|
|
expr: rate(sub2api_http_requests_total{status=~"5.."}[5m]) / rate(sub2api_http_requests_total[5m]) > 0.01
|
|||
|
|
for: 2m
|
|||
|
|
labels:
|
|||
|
|
severity: critical
|
|||
|
|
annotations:
|
|||
|
|
summary: "Error rate exceeds 1%"
|
|||
|
|
|
|||
|
|
# 数据库连接池耗尽
|
|||
|
|
- alert: DBConnectionPoolExhausted
|
|||
|
|
expr: sub2api_db_connections{state="active"} / sub2api_db_connections{state="max"} > 0.9
|
|||
|
|
for: 1m
|
|||
|
|
labels:
|
|||
|
|
severity: critical
|
|||
|
|
annotations:
|
|||
|
|
summary: "Database connection pool nearly exhausted"
|
|||
|
|
|
|||
|
|
# 缓存命中率下降
|
|||
|
|
- alert: CacheHitRateLow
|
|||
|
|
expr: rate(sub2api_cache_operations_total{result="hit"}[5m]) / (rate(sub2api_cache_operations_total{result="hit"}[5m]) + rate(sub2api_cache_operations_total{result="miss"}[5m])) < 0.7
|
|||
|
|
for: 10m
|
|||
|
|
labels:
|
|||
|
|
severity: warning
|
|||
|
|
annotations:
|
|||
|
|
summary: "Cache hit rate below 70%"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 压测方案
|
|||
|
|
|
|||
|
|
### 快速开始
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 安装 k6
|
|||
|
|
brew install k6 # macOS
|
|||
|
|
# 或参考 https://k6.io/docs/getting-started/installation/
|
|||
|
|
|
|||
|
|
# 2. 运行基线测试
|
|||
|
|
cd performance-testing
|
|||
|
|
./scripts/run-tests.sh baseline -u http://localhost:8080
|
|||
|
|
|
|||
|
|
# 3. 查看结果
|
|||
|
|
open results/baseline_*.html
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试场景
|
|||
|
|
|
|||
|
|
| 场景 | VU 范围 | 持续时间 | 目标 |
|
|||
|
|
|------|---------|----------|------|
|
|||
|
|
| baseline | 10-50 | 5 分钟 | 建立性能基线 |
|
|||
|
|
| load | 20-200 | 10 分钟 | 验证峰值性能 |
|
|||
|
|
| stress | 50-1000 | 15 分钟 | 找出断点 |
|
|||
|
|
| soak | 100 | 8 小时 | 验证稳定性 |
|
|||
|
|
|
|||
|
|
### 性能目标
|
|||
|
|
|
|||
|
|
| 指标 | 目标值 | 优先级 |
|
|||
|
|
|------|--------|--------|
|
|||
|
|
| P95 延迟 | < 1s | P0 |
|
|||
|
|
| P99 延迟 | < 3s | P1 |
|
|||
|
|
| 错误率 | < 1% | P0 |
|
|||
|
|
| TTFT P99 | < 5s | P1 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💰 成本效益分析
|
|||
|
|
|
|||
|
|
### 优化成本估算
|
|||
|
|
|
|||
|
|
| 阶段 | 人力成本 | 基础设施成本 | 总成本 |
|
|||
|
|
|------|----------|--------------|--------|
|
|||
|
|
| 快速优化 | 1-2 人天 | $0 | $500-1000 |
|
|||
|
|
| 架构优化 | 1-2 人周 | $0-500/月 | $5000-10000 |
|
|||
|
|
| 深度优化 | 2-4 人月 | $500-2000/月 | $30000-60000 |
|
|||
|
|
|
|||
|
|
### 收益量化
|
|||
|
|
|
|||
|
|
| 优化项 | 延迟改善 | 吞吐量提升 | 潜在收益 |
|
|||
|
|
|--------|----------|------------|----------|
|
|||
|
|
| 连接池调优 | -20% | +30% | 节省 20% 基础设施成本 |
|
|||
|
|
| 缓存优化 | -40% | +50% | 支持 2 倍用户增长 |
|
|||
|
|
| 数据库优化 | -50% | +100% | 延迟 SLA 达标 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 行动计划
|
|||
|
|
|
|||
|
|
### 立即行动(本周)
|
|||
|
|
|
|||
|
|
- [ ] 运行基线性能测试,建立基准数据
|
|||
|
|
- [ ] 检查当前 Prometheus 指标面板
|
|||
|
|
- [ ] 确认数据库连接池配置
|
|||
|
|
- [ ] 确认 Redis 连接池配置
|
|||
|
|
|
|||
|
|
### 短期行动(2周内)
|
|||
|
|
|
|||
|
|
- [ ] 实施连接池参数优化
|
|||
|
|
- [ ] 添加关键数据库索引
|
|||
|
|
- [ ] 优化 Prometheus 标签基数
|
|||
|
|
- [ ] 创建性能回归测试
|
|||
|
|
|
|||
|
|
### 中期行动(1个月)
|
|||
|
|
|
|||
|
|
- [ ] 实现请求去重机制
|
|||
|
|
- [ ] 添加连接池预热
|
|||
|
|
- [ ] 补充缺失的监控指标
|
|||
|
|
- [ ] 建立性能 SLA 仪表板
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📎 附录
|
|||
|
|
|
|||
|
|
### A. 相关文件
|
|||
|
|
|
|||
|
|
| 文件 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| `backend/internal/pkg/metrics/metrics.go` | Prometheus 指标定义 |
|
|||
|
|
| `backend/internal/service/gateway_service.go` | Gateway 核心服务 |
|
|||
|
|
| `backend/internal/service/api_key_service.go` | API Key 服务 |
|
|||
|
|
| `backend/internal/repository/api_key_repo.go` | 数据访问层 |
|
|||
|
|
| `backend/internal/repository/db_pool.go` | 数据库连接池 |
|
|||
|
|
| `backend/internal/repository/redis.go` | Redis 客户端 |
|
|||
|
|
| `deploy/monitoring/` | 监控部署配置 |
|
|||
|
|
|
|||
|
|
### B. 参考资料
|
|||
|
|
|
|||
|
|
- [k6 性能测试文档](https://k6.io/docs/)
|
|||
|
|
- [Prometheus 最佳实践](https://prometheus.io/docs/practices/)
|
|||
|
|
- [PostgreSQL 性能调优](https://wiki.postgresql.org/wiki/Performance_Optimization)
|
|||
|
|
- [Redis 性能调优](https://redis.io/topics/performance)
|
|||
|
|
|
|||
|
|
### C. 性能测试套件
|
|||
|
|
|
|||
|
|
完整的性能测试套件位于 `performance-testing/` 目录:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
performance-testing/
|
|||
|
|
├── README.md # 使用说明
|
|||
|
|
├── config.js # 测试配置
|
|||
|
|
├── common/ # 共享模块
|
|||
|
|
│ ├── thresholds.js # 性能阈值
|
|||
|
|
│ ├── scenarios.js # 测试场景
|
|||
|
|
│ └── utils.js # 工具函数
|
|||
|
|
├── test-suites/ # 测试套件
|
|||
|
|
│ ├── health.test.js # 健康检查测试
|
|||
|
|
│ ├── api-keys.test.js # API Key 测试
|
|||
|
|
│ ├── gateway.test.js # Gateway 测试
|
|||
|
|
│ ├── admin.test.js # Admin 测试
|
|||
|
|
│ └── mixed-workload.test.js # 综合负载测试
|
|||
|
|
├── scripts/ # 执行脚本
|
|||
|
|
│ └── run-tests.sh # 测试运行脚本
|
|||
|
|
├── config/ # 优化配置
|
|||
|
|
│ ├── database-optimization.md # 数据库优化
|
|||
|
|
│ └── redis-optimization.md # Redis 优化
|
|||
|
|
└── reports/ # 报告模板
|
|||
|
|
└── PERFORMANCE_REPORT_TEMPLATE.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**报告生成时间**: 2026-04-06 21:35 UTC
|
|||
|
|
**分析师**: 性能基准测试员
|
|||
|
|
**下次评审**: 2026-04-13
|