docs: record backend capacity review

This commit is contained in:
Codex
2026-07-01 03:01:02 +08:00
parent ad1c69037b
commit 49358aae6b
8 changed files with 124 additions and 22 deletions

View File

@@ -8,7 +8,8 @@
- 环境:本地 Docker Desktop + 本地 Supabase/PostgreSQL + 本地 API 进程。
- 数据PocketBase 真实导出数据导入新 PostgreSQL 后压测。
- 数据规模:当前真实迁移库约 74,117 道题、1,601 个题目合集、3,106 个练习蓝图、3,505 个单词、2,678 条知识手册、3,690 个用户、113,810 条答题记录、38,207 条错题和 458 条权益。
- 数据规模:当前真实迁移库已包含前期压测写入记录,约 74,117 道题、1,601 个题目合集、3,106 个练习蓝图、3,505 个单词、2,678 条知识手册、3,690 个用户、196,846 条答题记录、38,207 条错题和 466 条权益。
- Docker Desktop 资源:当前本机约 20 CPU、62.7GB 内存,高于常见 4 核 16G 云服务器;本地结果只用于观察代码和索引趋势。
- 写入流量:混合场景开启真实刷题闭环,包含创建 session、拉取 session detail、提交若干答案、交卷和读取报告。
- 商城说明:本地库的订单数据会受 seed、烟测和导入演练影响当前容量结论聚焦题库读写链路不用于推断 GMV、支付或订单峰值。
- 排行榜:未纳入默认压测,当前产品默认关闭排行榜。
@@ -80,11 +81,27 @@
同轮 `npm run perf:summary -- --allow-writes` 已分别通过 100 worker `P95 <= 300ms/P99 <= 800ms` 和 150 worker `P95 <= 500ms/P99 <= 1200ms` 的容量观察阈值。
### 2026-07-01 最新真实数据容量复核
本轮按用户最新要求重新确认本地 Supabase 数据量、Docker Desktop 资源,并复跑只读上线门禁与 50/100/150 混合读写阶梯。排行榜仍未纳入默认负载,头像相关链路不参与压测,因为学生头像产品策略已固定为男女预设头像。
| 并发 worker | 时长 | 刷题写入比例 | 请求数 | 错误率 | 吞吐 | P95 | P99 | 结论 |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| 30 | 120s | 0% | 64,382 | 0.00% | 532.97 req/s | 140.64 ms | 193.69 ms | 通过只读上线门禁 |
| 50 | 60s | 10% | 40,065 | 0.00% | 658.11 req/s | 151.63 ms | 188.07 ms | 混合读写舒适 |
| 100 | 60s | 8% | 37,290 | 0.00% | 610.57 req/s | 303.93 ms | 376.47 ms | 接近舒适区上沿 |
| 150 | 60s | 6% | 33,952 | 0.00% | 555.08 req/s | 490.53 ms | 639.05 ms | 零错误但进入压力区 |
本轮 `npm run perf:summary` 校验结果:
- 30 worker 只读门禁通过,满足 `errors=0``errorRate<=0.001``p95<=300ms``p99<=800ms``duration>=120s`
- 50/100/150 worker 混合读写均为 0 错误100 worker 已接近 `P95=300ms` 舒适线150 worker 只作为压力上沿观察。
## 初步结论
- 本地 Docker 环境下,100 个无停顿 worker P95 仍低于 300ms可以作为当前代码和索引状态的本地舒适区参考2026-07-01 最新 100 worker/60s/8% 写入为 737.22 req/s、P95 244.12ms、P99 320.26ms、0 错误
- 150 个无停顿 worker 仍然 0 错误,但 P95 在不同轮次中明显升高,最新 150 worker/60s/6% 写入为 681.44 req/s、P95 387.58ms、P99 510.79ms,已经能看到本地压力拐点
- 按最新 897 req/s 只读吞吐粗略折算,如果未来前端真实埋点显示每名在线学生平均 0.05 到 0.2 req/s则理论请求吞吐约对应 4,485 到 17,940 名活跃在线学生;按最新混合读写舒适区 737 req/s 估算约为 3,685 到 14,744 名;按 150 worker 压力区 681 req/s 估算约为 3,407 到 13,629 名。这只是吞吐换算,不是生产 SLA
- 本地 Docker 环境下,50 worker 混合读写 P95 约 151.63ms100 worker 混合读写 P95 约 303.93ms100 worker 已接近当前本机舒适区上沿150 worker 仍然 0 错误,但 P95 约 490.53ms,已经是压力区
- 按最新 658 req/s 的 50 worker 舒适吞吐粗略折算,如果未来前端真实埋点显示每名在线学生平均 0.05 到 0.2 req/s则理论请求吞吐约对应 3,290 到 13,160 名活跃在线学生;按 100 worker 上沿 610 req/s 估算约为 3,050 到 12,210 名;按 150 worker 压力区 555 req/s 估算约为 2,775 到 11,100 名。这只是吞吐换算,不是生产 SLA
- 当前 Docker Desktop 给了 20 CPU 和约 62.7GB 内存,生产如果使用 4 核 16G 单机,首版容量承诺建议先按本地折算值的 30% 到 50% 保守规划,再以云端复测和真实前端埋点上调
- 正式容量承诺必须在目标 4 核 16G 云服务器、生产 PostgreSQL 参数、对象存储/CDN、真实前端请求节奏和生产网络下复跑。
## 后续复测