topfans/backend/reports/final-report.md
2026-06-15 20:10:56 +08:00

228 lines
5.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# TopFans 压测报告
## 📋 运行信息
| 项 | 值 |
|---|---|
| **生成时间** | 2026-06-15 20:05:56 CST |
| **压测开始** | 2026-06-15 20:05:47 CST |
| **压测结束** | 2026-06-15 20:05:56 CST |
| **总耗时** | 9s |
| **目标地址** | `http://localhost:8080` |
| **测试场景** | S4 |
| **阶梯模式** | step (`1,2,3`) |
| **JWT 签名密钥** | `topfans-***` (前 8 位) |
| **监控模式** | off |
| **总请求数** | 34 |
| **总错误数** | 26 (76.47%) |
| **5xx 数** | 0 (0.00%) |
---
## 🎯 执行摘要
**总览**: ✅ 1 健康 / ⚠️ 0 警告 / 🚨 2 严重 (共 3)
🚨 **关键问题** (2 个):
- **S2 (浏览资产详情)**: 错误率 100.00%
- **S4 (资产铸造 (mint))**: 错误率 100.00%
**场景速览**:
-**S1 用户登录** — p99=83ms, err 0.00%
- 🚨 **S2 浏览资产详情** — p99=3ms, err 100.00%
- 🚨 **S4 资产铸造 (mint)** — p99=2ms, err 100.00%
---
## 📊 总览表
| 场景 | 描述 | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 拐点 RPS | 状态 |
|------|------|-------|-----|-----|-------|-------|-------|-------|---------|------|
| **S1** | 用户登录 | 8 | 0 (0.00%) | 0 (0.00%) | 74 | 83 | 83 | 83 | — | ✅ |
| **S2** | 浏览资产详情 | 8 | 8 (100.00%) | 0 (0.00%) | 2 | 3 | 3 | 3 | — | 🚨 |
| **S4** | 资产铸造 (mint) | 18 | 18 (100.00%) | 0 (0.00%) | 1 | 2 | 2 | 2 | — | 🚨 |
> 说明: Err 包含 4xx + 5xx,5xx 是子集。错误率 = Err / Total。
## 🔬 跨场景瓶颈分析
**无明显瓶颈**,所有场景 P99 都在阈值内。
**P99 / 阈值 比率** (从高到低):
- S1: 0.08x (83ms)
- S2: 0.01x (3ms)
- S4: 0.00x (2ms)
---
## ✅ S1 用户登录
### 📌 测试说明
| 项 | 值 |
|---|---|
| **API** | `POST /api/v1/auth/login` |
| **负载类型** | ✏️ 轻写 |
| **业务说明** | 用户身份认证,签发 JWT |
| **影响范围** | 🔴 所有用户必经路径,失败 = 用户进不来 |
### 📈 性能指标 vs 健康阈值
| 指标 | 实测 | 阈值 | 判定 |
|------|------|------|------|
| P50ms | 74 | ≤100 | ✅ |
| P95ms | 83 | ≤300 | ✅ |
| P99ms | 83 | ≤1000 | ✅ |
| Maxms | 83 | — | 参考 |
| 错误率 | 0.00% | ≤1.00% | ✅ |
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
### 📍 拐点分析
仅 1 个 stage,未做阶梯测试,无法判断拐点。
### 🔢 阶梯结果
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
| 1 | 1 | 8 | 0 | 0 | 74 | 83 | 83 | 83 | |
### 🎯 行动项
✅ 无需行动项 — 所有指标在阈值内。
### 📉 图表
![S1 RPS / P99 / Error](.//s1.png)
---
## 🚨 S2 浏览资产详情
### 📌 测试说明
| 项 | 值 |
|---|---|
| **API** | `GET /api/v1/assets/{id}` |
| **负载类型** | 📖 读 |
| **业务说明** | 高频读路径,典型缓存命中场景 |
| **影响范围** | 🟢 单用户最高频操作,影响页面加载体验 |
### 📈 性能指标 vs 健康阈值
| 指标 | 实测 | 阈值 | 判定 |
|------|------|------|------|
| P50ms | 2 | ≤50 | ✅ |
| P95ms | 3 | ≤150 | ✅ |
| P99ms | 3 | ≤500 | ✅ |
| Maxms | 3 | — | 参考 |
| 错误率 | 100.00% | ≤1.00% | 🚨 |
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
### 📍 拐点分析
仅 1 个 stage,未做阶梯测试,无法判断拐点。
### 🔢 阶梯结果
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
| 1 | 1 | 8 | 8 | 0 | 2 | 3 | 3 | 3 | |
### 🎯 行动项
- [ ] **🟡 P1**: 错误率 100.00% — 检查 4xx 错误码,看是否 JWT 过期 / 数据缺失
### 📉 图表
![S2 RPS / P99 / Error](.//s2.png)
---
## 🚨 S4 资产铸造 (mint)
### 📌 测试说明
| 项 | 值 |
|---|---|
| **API** | `POST /api/v1/assets/mints/precreate` |
| **负载类型** | 🛠️ 重写 |
| **业务说明** | 写重路径:OSS 上传 + 签名 + 事务落库 |
| **影响范围** | 🟡 核心交易,影响创作者产出节奏 |
### 📈 性能指标 vs 健康阈值
| 指标 | 实测 | 阈值 | 判定 |
|------|------|------|------|
| P50ms | 1 | ≤300 | ✅ |
| P95ms | 2 | ≤800 | ✅ |
| P99ms | 2 | ≤2000 | ✅ |
| Maxms | 2 | — | 参考 |
| 错误率 | 100.00% | ≤1.00% | 🚨 |
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
### 📍 拐点分析
**拐点未触发** — 全程 3 个 stage 健康运行,最高 3 RPS p99=2ms。
### 🔢 阶梯结果
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
| 1 | 1 | 3 | 3 | 0 | 4 | 9 | 9 | 9 | |
| 2 | 2 | 6 | 6 | 0 | 1 | 2 | 2 | 2 | -77% |
| 3 | 3 | 9 | 9 | 0 | 1 | 2 | 2 | 2 | +6% |
### 🎯 行动项
- [ ] **🟡 P1**: 错误率 100.00% — 检查 4xx 错误码,看是否 JWT 过期 / 数据缺失
### 📉 图表
![S4 RPS / P99 / Error](.//s4.png)
---
## 📎 附录
### 健康阈值说明
- **P50/P95/P99**: 百分位延迟 (毫秒),值越小越好
- **错误率**: 4xx+5xx 请求占比,健康 < 1%
- **5xx **: 服务端错误率,健康 < 0.1%
- **拐点**: 阶梯测试中,p99 相对前一 stage 涨幅 > 50% 的第一个 stage
### 文件清单
```
reports/
├── final-report.md (本文件)
├── baseline.csv (Excel 可打开的汇总)
├── s1.json
├── s1.png
├── s2.json
├── s2.png
├── s3.json
├── s3.png
├── s4.json
├── s4.png
├── s5.json
├── s5.png
├── s6.json
├── s6.png
├── s7.json
├── s7.png
```
### 如何复现
```bash
cd /opt/topfans/loadtest
./loadgen --cmd=run --scenarios=S4 --stage=step --step-schedule='1,2,3' \
--target=http://localhost:8080 \
--monitor=off \
```