forked from wangziqi/gongxue-base
feat: add docker capacity benchmark mode
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
- `apps/api`:新业务 API 服务,内部按 `src/core` 和 `src/features` 分层。
|
||||
- `packages/config`、`packages/db`、`packages/domain`:新系统共享基础包。
|
||||
- `scripts/import-pocketbase`:PocketBase schema/数据导入工具。
|
||||
- `docker-compose.api.yml`、`apps/api/Dockerfile`:本地 Docker API 运行入口。
|
||||
- `docker-compose.api.yml`、`docker-compose.api.benchmark.yml`、`apps/api/Dockerfile`:本地 Docker API 和受限资源压测入口。
|
||||
- `docs/refactor/architecture.md`:新重构目录边界和工程规范。
|
||||
- `docs/refactor/ai-development-guardrails.md`:后续 AI/开发者必须遵守的 Supabase-first 架构和安全守则。
|
||||
- `docs/refactor/content-import-contract.md`:题目、单词、知识手册导入契约,明确后端校验、旧格式转换和前端职责。
|
||||
@@ -29,7 +29,7 @@
|
||||
- `docs/refactor/taro-frontend-integration.md`:Taro/H5/小程序启动、请求封装、页面/API 映射。
|
||||
- `docs/refactor/taro-h5-deployment.md`:Taro H5 三域名部署、运行时配置、Nginx、CSP、缓存和 CORS 边界。
|
||||
- `docs/refactor/postgresql-4c16g-tuning.md`:4 核 16G 自托管 PostgreSQL 起步调参、观察 SQL 和回滚方式。
|
||||
- `docs/refactor/performance-benchmark-runbook.md`:本地/云端 API 压测、4 核 16G 阶梯并发矩阵和报告归档方式。
|
||||
- `docs/refactor/performance-benchmark-runbook.md`:本地/云端 API 压测、4 核 16G 阶梯并发矩阵、Docker 受限资源预演和报告归档方式。
|
||||
- `docs/refactor/performance-benchmark-summary-20260630.md`:真实迁移数据压测脱敏摘要。
|
||||
- `docs/refactor/backend-open-items-and-capacity-20260701.md`:后端剩余功能、已定稿产品口径和最新在线容量估算。
|
||||
- `docs/refactor/multitenant-auth-security-contract.md`:多租户隔离、鉴权、权限和资源安全红线。
|
||||
|
||||
@@ -62,6 +62,14 @@ npm run docker:api:up
|
||||
|
||||
如果 Docker 拉取 `node:20-alpine` 超时,先配置 Docker Desktop 镜像源或代理,再重试 `npm run docker:api:build`。
|
||||
|
||||
本地容量预演可以使用专门的 benchmark override:
|
||||
|
||||
```bash
|
||||
npm run perf:api:docker-4c16g
|
||||
```
|
||||
|
||||
该命令会使用 `docker-compose.api.yml` + `docker-compose.api.benchmark.yml` 启动受限 API 容器,默认限制 API 为 2 CPU/4G、`DB_POOL_MAX=10`,关闭 `ALLOW_LEGACY_AUTH_HEADERS`,并用 Bearer `tk_` 会话跑压测。它只用于本地模拟和跑分,不是生产 compose 文件。
|
||||
|
||||
验证 API:
|
||||
|
||||
```bash
|
||||
@@ -81,6 +89,7 @@ npm run pb:import:validate
|
||||
|
||||
- Docker Desktop 可用。
|
||||
- Supabase 本地容器可启动。
|
||||
- API Dockerfile 已验证可构建;benchmark override 可启动受限 API 容器并通过短压测 smoke。
|
||||
- `supabase db reset` 可完整执行三份 migration 和 seed。
|
||||
- `supabase db reset` 可完整执行全部 migration 和 seed。
|
||||
- `npm run db:smoke-seed` 可恢复最小业务烟测数据。
|
||||
|
||||
@@ -19,6 +19,16 @@ npm run perf:api:local
|
||||
- 默认不创建练习 session,不写业务数据。
|
||||
- 输出 JSON 和 Markdown 报告到 `docs/refactor/performance-reports/`。该目录已被 `.gitignore` 忽略,不应提交。
|
||||
|
||||
默认本地兼容模式使用 `x-user-id` 作为压测身份,只适合开发机。更接近 Taro/Supabase 接入方式的压测应启用迁移期 Bearer session:
|
||||
|
||||
```powershell
|
||||
$env:PERF_AUTH_MODE="app_session"
|
||||
npm run perf:api:local
|
||||
Remove-Item Env:\PERF_AUTH_MODE
|
||||
```
|
||||
|
||||
`app_session` 模式会在测试库中为压测学生创建 2 小时 `tk_` 会话,然后用 `Authorization: Bearer <tk_...>` 请求业务接口;API 可以关闭 `ALLOW_LEGACY_AUTH_HEADERS`。生产远程压测如果已经有真实 Supabase access token,也可以用 `PERF_AUTH_MODE=bearer` 和 `PERF_BEARER_TOKEN`。
|
||||
|
||||
PostgreSQL 调参与运行证据:
|
||||
|
||||
```bash
|
||||
@@ -83,6 +93,8 @@ npm run perf:api:local
|
||||
| `PERF_INCLUDE_LEADERBOARD` | `false` | 是否加入排行榜接口;排行榜租户默认关闭,仅在租户明确开启并需要专项压测时打开 |
|
||||
| `PERF_OUTPUT_DIR` | `docs/refactor/performance-reports` | 报告输出目录 |
|
||||
| `PERF_REQUEST_TIMEOUT_MS` | `15000` | 单请求超时 |
|
||||
| `PERF_AUTH_MODE` | `legacy` | `legacy` 使用本地 `x-user-id`;`app_session` 创建 `tk_` Bearer session;`bearer` 使用 `PERF_BEARER_TOKEN`;`none` 只适合公开接口 |
|
||||
| `PERF_BEARER_TOKEN` | 空 | `PERF_AUTH_MODE=bearer` 时使用 |
|
||||
|
||||
## 默认工作负载
|
||||
|
||||
@@ -138,6 +150,37 @@ npm run perf:api:local
|
||||
|
||||
本地 Docker Desktop 可以先用同一矩阵做跑分,但只能证明代码、索引和本机 Docker 环境的趋势。正式容量承诺必须以目标云服务器、生产 PostgreSQL 参数、生产 API/worker 连接池、对象存储/CDN 和真实网络重新跑。
|
||||
|
||||
## 本地 Docker 4c16g 模拟入口
|
||||
|
||||
仓库提供一个 Docker API 受限资源压测入口:
|
||||
|
||||
```powershell
|
||||
$env:DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:54322/postgres"
|
||||
$env:BENCHMARK_API_CPUS="2.0"
|
||||
$env:BENCHMARK_API_MEMORY="4g"
|
||||
$env:DB_POOL_MAX="10"
|
||||
npm run perf:api:docker-4c16g
|
||||
Remove-Item Env:\BENCHMARK_API_CPUS
|
||||
Remove-Item Env:\BENCHMARK_API_MEMORY
|
||||
Remove-Item Env:\DB_POOL_MAX
|
||||
```
|
||||
|
||||
它会使用 `docker-compose.api.yml` + `docker-compose.api.benchmark.yml` 构建并启动 API 容器,默认限制 API 容器为 2 CPU/4G,关闭 `ALLOW_LEGACY_AUTH_HEADERS`,然后用 `PERF_AUTH_MODE=app_session` 跑:
|
||||
|
||||
- 30 worker / 120s / 只读上线门禁。
|
||||
- 50 worker / 60s / 10% 刷题闭环写入。
|
||||
- 100 worker / 60s / 8% 刷题闭环写入。
|
||||
|
||||
这个入口模拟的是“4 核 16G shared-host 中 API 容器的资源约束”,不是完整云服务器复刻。当前本地 Supabase/PostgreSQL 仍跑在 Docker Desktop 的 Supabase stack 中,除非额外手工限制 DB 容器资源,否则数据库容器仍可能使用 Docker Desktop 的全局资源。正式容量承诺必须在目标 4 核 16G 云服务器、生产 PostgreSQL shared-host 参数、真实对象存储/CDN 和真实网络下复跑。
|
||||
|
||||
如需保留 API 容器便于排查:
|
||||
|
||||
```powershell
|
||||
$env:PERF_KEEP_DOCKER_API="true"
|
||||
npm run perf:api:docker-4c16g
|
||||
Remove-Item Env:\PERF_KEEP_DOCKER_API
|
||||
```
|
||||
|
||||
PowerShell 示例:
|
||||
|
||||
```powershell
|
||||
|
||||
Reference in New Issue
Block a user