| .. | ||
| loadgen | ||
| monitor | ||
| recover | ||
| scripts | ||
| seed | ||
| README.md | ||
后端服务压测工具
为部署在阿里云单机(4G/2C)的 TopFans 后端微服务设计。
目录
backend/scripts/loadgen/
├── seed/ # 数据准备工具(CLI)
│ ├── main.go # seed CLI 入口
│ ├── stars.go users.go profiles.go assets.go
│ ├── slots_and_exhibits.go friendships.go
│ ├── tokens.go sequences.go cleanup.go
│ ├── seed_test.go # 单元测试
│ └── README.md
├── loadgen/ # 压测主程序
│ ├── main.go # loadgen CLI 入口
│ ├── preflight.go verify.go # 7 项开压前检查 + 压后验证
│ ├── lib/ # 核心库(16 个测试全过)
│ │ ├── csv.go client.go hdr.go log.go ramp.go
│ │ ├── circuit.go ssh_metrics.go config.go
│ │ └── *_test.go
│ ├── scenarios/ # 7 个场景(已注册)
│ │ ├── s1_login.go s2_read.go s3_like.go s4_mint.go
│ │ ├── s5_dashboard.go s6_ranking.go s7_place.go
│ │ ├── common.go scenarios.go
│ │ └── scenarios_test.go
│ └── reporter/ # 报告生成
│ ├── json.go csv.go plot.go markdown.go
├── monitor/ # 监控栈
│ ├── sample.sh # 后台采样(写到 metrics-feed.jsonl)
│ ├── docker-compose.monitor.yml
│ ├── prometheus.yml
│ └── grafana-dashboards/ # 4 个预置面板
├── recover/ # 一键灭火 + 备份还原
│ ├── emergency-stop.sh
│ └── restore-from-backup.sh
├── scripts/ # 部署到 prod
│ └── mint_reset.sh
└── reports/ # 跑测产出(gitignore)
编译
cd backend
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o bin/seed ./scripts/loadgen/seed/
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o bin/loadgen ./scripts/loadgen/loadgen/
测试
cd backend
go test ./scripts/loadgen/...
当前测试状态 (截至 Phase 7 完结):
seed包: 5/5 PASSloadgen/lib包: 16/16 PASSloadgen/scenarios包: 2/2 PASS- 共 23 个测试全过
关键特性
1. 6 维红线判停(自动熔断)
| # | 红线 | 阈值 | 数据源 |
|---|---|---|---|
| R1 | 客户端错误率 | > 5% 持续 30s | loadgen HDR |
| R2 | 客户端 P99 | > 3000ms 持续 30s | loadgen HDR |
| R3 | 5xx 比例 | > 10% 持续 10s | loadgen status |
| R4 | PG 连接数 | > 42 持续 30s | metrics-feed |
| R5 | 磁盘空闲 | < 5GB 持续 30s | metrics-feed |
| R6 | OOM 事件 | 瞬时触发 | metrics-feed |
2. CLAUDE.md 序列重置
seed 工具自动同步所有相关表的 PG 序列(避免后续 GORM 插入报 duplicate key)。
3. 数据隔离
所有测试数据用 star_id = 999900 物理隔离,不影响真实业务 star_id (87, 88, 91, 93, 94, 95)。
4. 凌晨窗口
执行窗口:凌晨 02:00-06:00 业务低峰。emergency-stop 一键回滚,restore-from-backup.sh 5-8min 还原。
详细文档
- 设计文档:
docs/superpowers/specs/2026-06-12-load-testing-design.md - 实施计划:
docs/superpowers/plans/2026-06-12-load-testing.md - seed 工具说明:
seed/README.md