feat(perf): 增加大数据压测脚手架
This commit is contained in:
75
docs/performance.md
Normal file
75
docs/performance.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# V2.6 Performance Harness
|
||||
|
||||
V2.6 adds a deterministic large-data fixture and a small HTTP performance harness for the current hot paths. The goal is to make performance regressions visible before adding more background jobs and Xiaobao automation.
|
||||
|
||||
## Fixture Sizes
|
||||
|
||||
The fixture script creates only `perf-*` rows and can be rerun safely. It covers:
|
||||
|
||||
- products
|
||||
- projects
|
||||
- versions
|
||||
- requirements
|
||||
- version plans
|
||||
- dev tasks
|
||||
- test cases
|
||||
- bugs
|
||||
- work activities
|
||||
- Xiaobao risk summaries
|
||||
|
||||
Preset sizes:
|
||||
|
||||
| Size | Purpose |
|
||||
| --- | --- |
|
||||
| `small` | Local smoke fixture. Fast dry-run and minimal database seed. |
|
||||
| `medium` | Default performance gate for V2.6 hot APIs. |
|
||||
| `large` | Stress fixture for query/index audit work. |
|
||||
|
||||
Stable anchors used by the harness:
|
||||
|
||||
```text
|
||||
productId=perf-product-001
|
||||
versionId=perf-version-001-001-001
|
||||
userId=perf-user-dev-01
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
Dry-run without database access:
|
||||
|
||||
```bash
|
||||
node scripts/seed-large-dataset.mjs --size small --dry-run
|
||||
node scripts/perf-check.mjs --base-url http://localhost:3001/api/v1 --dry-run
|
||||
```
|
||||
|
||||
Seed a database:
|
||||
|
||||
```bash
|
||||
pnpm perf:seed -- --size small
|
||||
```
|
||||
|
||||
Run the hot-path harness against a running NestJS API:
|
||||
|
||||
```bash
|
||||
pnpm perf:check -- --base-url http://localhost:3001/api/v1
|
||||
```
|
||||
|
||||
## Hot Probes
|
||||
|
||||
`perf-check` measures p50 and p95 latency, records HTTP status code counts, and exits non-zero when a request fails or p95 exceeds the current query budget.
|
||||
|
||||
| Probe | Endpoint | p95 Budget |
|
||||
| --- | --- | ---: |
|
||||
| Runtime version | `/health/version` | 500ms |
|
||||
| Requirement pool | `/v2.2/requirements?productId=perf-product-001&q=REQ&limit=50` | 1000ms |
|
||||
| Version detail | `/v2.2/versions/perf-version-001-001-001/detail-data` | 1500ms |
|
||||
| Workspace | `/v2.2/workspace?userId=perf-user-dev-01` | 1200ms |
|
||||
| Xiaobao warning | `/v2.2/xiaobao-warning?manager=true` | 1000ms |
|
||||
|
||||
The medium fixture is the V2.6 acceptance target. Large fixture runs are for index audit and explain-plan work, not for every local commit.
|
||||
|
||||
## Notes
|
||||
|
||||
- `seed-large-dataset` uses deterministic IDs and dates so repeated runs are comparable.
|
||||
- Non-dry-run seeding deletes and recreates only `perf-*` rows.
|
||||
- The harness intentionally depends on public API endpoints instead of calling Prisma directly; it measures the same path the frontend uses.
|
||||
Reference in New Issue
Block a user