forked from wangziqi/gongxue-base
2.4 KiB
2.4 KiB
真实迁移数据 API 压测摘要
更新时间:2026-06-30
这份文件只记录脱敏后的聚合指标,便于 README、上线门禁和后续 AI 开发继续引用。原始 JSON/Markdown 报告位于已忽略的 docs/refactor/performance-reports/,不要提交到 Git。
测试口径
- 环境:本地 Docker Desktop + 本地 Supabase/PostgreSQL + 本地 API 进程。
- 数据:PocketBase 真实导出数据导入新 PostgreSQL 后压测。
- 数据规模:约 74,102 道题、1,597 个题目合集、3,102 个练习蓝图、3,500 个单词、2,676 条知识手册、3,670 个用户。
- 写入流量:开启真实刷题闭环,包含创建 session、拉取 session detail、提交若干答案、交卷和读取报告。
- 排行榜:未纳入默认压测,当前产品默认关闭排行榜。
- 说明:压测 worker 是无停顿请求流,不等同于真实在线学生数。真实在线容量需要前端埋点后按单个学生平均 RPS 折算。
结果
| 并发 worker | 时长 | 刷题写入比例 | 请求数 | 错误率 | 吞吐 | P95 | P99 |
|---|---|---|---|---|---|---|---|
| 30 | 120s | 10% | 112,896 | 0.00% | 934.74 req/s | 64.26 ms | 81.14 ms |
| 50 | 120s | 10% | 92,737 | 0.00% | 767.24 req/s | 121.51 ms | 159.12 ms |
| 100 | 120s | 8% | 84,608 | 0.00% | 699.27 req/s | 254.69 ms | 331.84 ms |
| 150 | 120s | 6% | 82,693 | 0.00% | 682.40 req/s | 369.90 ms | 493.69 ms |
初步结论
- 本地 Docker 环境下,100 个无停顿 worker 内 P95 仍低于 300ms,可以作为当前代码和索引状态的本地舒适区参考。
- 150 个无停顿 worker 仍然 0 错误,但 P95 上升到约 370ms,已经能看到压力拐点。
- 如果未来前端真实埋点显示每名在线学生平均 0.05 到 0.2 req/s,则 700 req/s 理论吞吐约对应 3,500 到 14,000 名活跃在线学生请求量;这只是吞吐换算,不是生产 SLA。
- 正式容量承诺必须在目标 4 核 16G 云服务器、生产 PostgreSQL 参数、对象存储/CDN、真实前端请求节奏和生产网络下复跑。
后续复测
上云后按 docs/refactor/performance-benchmark-runbook.md 复跑至少以下场景:
- 只读 30/50/100 并发阶梯。
- 混合读写 30/50/100 并发阶梯。
- 结合
pg_stat_statements、慢 SQL、CPU、I/O、连接池和锁等待确认瓶颈。 - 把代表性结果写入本地
docs/refactor/production-launch-evidence.json,再执行npm run launch:gate。