Files
gongxue-base/docs/refactor/backend-open-items-and-capacity-20260701.md
2026-07-01 03:19:06 +08:00

75 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 后端剩余功能与真实数据容量复核
更新时间2026-07-01
这份文件用于回答“旧题库功能还有哪些没补齐、当前能支撑多少人同时在线刷题、上线前还要做什么”。结论以当前 Supabase/PostgreSQL 新架构为准,旧 PocketBase 项目只作为功能参考和数据迁移来源。
## 功能对齐结论
后端主链路已经覆盖旧题库的核心业务:刷题、顺序/随机/全真模拟、答题判分、错题本、收藏夹、背单词、知识手册、分数线、个人中心、会员权益、订单、优惠券、激活码、题目反馈、勋章、站内通知、题目视频、资料下载、题库/单词/手册/分数线/视频导入、题库导出、租户后台内容管理、学生运营、销售/代理/CRM、分佣、平台 SaaS 租户/套餐/账单/用量/公共题库授权。
多租户底座已经具备商用联调条件租户隔离、Supabase Auth JWT 映射、迁移期 session、RLS 测试、平台/租户/学生三类身份边界、租户自定义角色模板、班级/教师/学生范围权限、字段脱敏、审计日志、私有资源短签名和导入/导出 job 审计均已落地。
两个产品口径已经定稿,不再作为默认待办反复开发:
- 学生头像只支持 `avatarPreset=male/female` 默认资源;不做头像上传、裁剪、第三方头像落库,也不允许租户后台批量导入头像 URL。
- 排行榜接口保留为租户显式开启后的活动能力;默认不开启,学生端默认不请求、不展示,日常学习激励以后台配置勋章自动发放为主。
## 仍需完成
当前“仍需完成”不是旧题库核心功能缺口。刷题、背单词、知识手册、分数线、个人中心、会员/订单、错题/收藏、资料/视频、租户后台、平台 SaaS、公共题库、销售/CRM/分佣等后端主链路已经具备前端联调条件。剩余项主要是上云生产环境、真实三方 provider、真实旧数据人工复核、运维安全和体验增强。
### 上云生产前 P0
1. 真实云端 Auth/JWKS、RLS 和生产配置验收:在预生产/生产执行 `readiness:production``readiness:production:db``smoke:auth:remote``test:rls` 并留档,生产关闭 `x-user-id` 和平台本地 key 兼容入口。
2. 真实旧数据人工复核:正式切换前处理 7 个已支付缺用户订单、22 个缺所属手册章节,并对题目、权益、订单、错题、资料和视频做人工抽样。
3. 真实 provider 联调:阿里云/腾讯云短信、微信小程序登录、微信网页登录、QQ 登录、微信支付、支付宝、支付/退款回调域名、官方账单格式抽样。
4. 对象存储生产安全:配置真实 OSS/COS/Supabase Storage bucket、外部 AV/内容安全扫描、CDN 防盗链、转码/CDN 级水印、生命周期策略和恢复演练。
5. 生产容量复测:目标云服务器按 4 核 16G 调参文档设置 PostgreSQL再按 30/50/100 只读和混合读写矩阵复跑,生成 `production-launch-evidence.json` 并通过 `npm run launch:gate`
6. 备份、日志、告警、回滚和安全扫描完成数据库快照、恢复演练、日志告警、Codex Security 真实扫描和上线审批证据。
### 商用增强 P1/P2
1. Taro 侧继续补小程序真机公式/图片混排、题图资源字段化、状态管理、包体优化、小程序支付容器、分享场景和端到端测试。
2. 租户后台继续补更细数据范围 UI、成员批量运营、主题素材库、导入操作体验、导出模板精排、财务复核细节和学习督导触达/效果归因。
3. 平台后台继续补平台在线收款、审计告警升级策略、催缴通知操作台细节、跨租户 BI 和更完整运营消息。
4. 销售/代理继续补真实打款 provider、发票、批量凭证上传、转化预聚合、团队看板和异常调整单。
5. AI 择校继续补真实 AI provider、prompt 版本管理、租户后台配置、PDF 报告 worker 和人工复核流程。
## 本地真实数据压测
### 环境和数据
- 环境Windows + Docker Desktop + 本地 Supabase/PostgreSQL + 本地 API 进程。
- Docker Desktop 当前资源20 CPU、约 62.7GB 内存。这个本机结果会高于常见 4 核 16G 云服务器,不能直接作为生产 SLA。
- 数据库PocketBase 真实导入数据,并已包含前期写入压测产生的练习/答题记录。
- 当前库规模3 个租户、3,690 个用户、约 74,117 道题、1,601 个题目合集、3,106 个练习蓝图、3,505 个单词、2,678 条知识手册、196,846 条答题记录、38,207 条错题、466 条权益。
- 排行榜未纳入默认负载,因为产品默认关闭。
### 2026-07-01 最新复核
| 场景 | 并发 worker | 时长 | 刷题写入比例 | 请求数 | 错误率 | 吞吐 | P95 | P99 | 结论 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| 只读上线门禁 | 30 | 120s | 0% | 60,326 | 0.00% | 499.27 req/s | 151.29 ms | 214.61 ms | 通过 |
| 混合读写 | 50 | 60s | 10% | 35,608 | 0.00% | 584.18 req/s | 174.26 ms | 224.04 ms | 舒适 |
| 混合读写 | 100 | 60s | 8% | 33,843 | 0.00% | 554.42 req/s | 326.21 ms | 422.33 ms | 接近舒适区上沿 |
| 混合读写 | 150 | 60s | 6% | 32,364 | 0.00% | 528.81 req/s | 490.38 ms | 662.42 ms | 压力区 |
混合读写包含真实刷题闭环:创建练习 session、拉取 session detail、提交答案、交卷、读取报告。
同轮 `npm run smoke:launch-persona` 已通过,覆盖普通学生 SVIP 后刷题、收藏、错题复习入口,租户管理员 dashboard/主题/学生/销售转化入口,平台管理员租户/套餐/审计入口,以及学生越权后台和跨租户访问拒绝。
### 在线人数折算
压测 worker 是无停顿请求流,不等于真实在线学生。刷题学生会读题、思考、翻页和等待网络,前端完成后还需要用真实埋点计算“单个活跃学生平均 RPS”。
按目前常见页面节奏先用 `0.05 到 0.2 req/s/人` 粗略折算:
- 50 worker 舒适场景 584 req/s约等于 2,920 到 11,680 名活跃在线学生的请求吞吐。
- 100 worker 上沿场景 554 req/s约等于 2,770 到 11,080 名活跃在线学生的请求吞吐。
- 150 worker 压力场景 529 req/s约等于 2,645 到 10,580 名活跃在线学生的请求吞吐。
当前本地结论:在 20 CPU/62.7GB Docker Desktop 环境下,后端真实刷题读写链路的舒适观察区间约为 550 到 585 req/s折算约 2,700 到 11,600 名活跃在线学生150 worker 仍 0 错误但 P95 接近 500ms视为压力区不建议作为生产承诺。
正式对外容量必须等 4 核 16G 云服务器部署后复跑。保守规划时,生产首版建议先按本地折算值的 30% 到 50% 做容量承诺等云端压测、CDN、对象存储和真实前端埋点完成后再上调。