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

6.7 KiB
Raw Blame History

后端剩余功能与真实数据容量复核

更新时间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:productionreadiness:production:dbsmoke:auth:remotetest: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、对象存储和真实前端埋点完成后再上调。