Files
orbit/docs/reports/phase-6-load.md

29 lines
2.3 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.
# P6:受理层有界负载工具
验证日期:2026-09-19。本批新增 `sdk/go/cmd/orbit-load`,用于隔离环境测量任务受理 HTTP 交换耗时。工具固定请求并发上限和每请求超时,使用独立幂等键,不自动重试、不启动 Worker、不执行外部副作用;失败仍输出报告并以非零状态退出。它不构成生产容量、可用性或百万租户承诺。
## 实现边界
- 请求数限制为 1–100000,并发限制为 1–1024;每次请求最多一个 HTTP 提交。
- 默认处理器为 `load.noop`,输入只包含随机运行标识和序号,任务尝试预算为 1,避免把测试逻辑误当业务处理器。
- 输出成功数、错误分类、p50/p95/p99/最大耗时;百分位采用最近秩,错误分类不包含令牌、请求体或内部错误文本。
- 工具不清理生成任务,运行前必须使用一次性数据库或专用命名空间;正式容量测试还需配套 Worker、流程、数据库锁等待、积压恢复和拓扑故障测量。
## 隔离实测
环境:macOS arm64 主机,Docker MySQL 8.4,已有 Orbit 服务二进制,负载命令使用 Go 1.25 兼容 modfile 交叉编译为 darwin/arm64;数据库和任务容器在测试结束后销毁。该次只验证工具与受理链路,不能替代项目要求的 Go 1.27.1 标准全量回归。
命令参数:`requests=24`、`concurrency=4`、`timeout=5s`,独立命名空间和队列,未启动 Worker。
实际输出:
```json
{"started_at":"2026-09-19T15:39:43.724491Z","finished_at":"2026-09-19T15:39:43.953625Z","requests":24,"concurrency":4,"success":24,"errors":0,"p50_ms":32.179459,"p95_ms":61.578333,"p99_ms":70.748416,"max_ms":70.748416}
```
结果证明 24 次独立 HTTP 受理均成功且没有错误分类;延迟数值只属于本次主机、连接、数据量和请求形状,不能外推到生产。Go 1.27.1 工具链恢复后,标准 `scripts/test-mysql.sh` 会再次执行相同负载样本并把输出纳入全量日志。
## 未完成的生产验收
仍需在固定硬件和目标拓扑中补充短/中/长任务混合、Worker 连接与重连、定时集中触发、流程推进、慢消费者、长期积压、数据库锁等待、复制延迟、故障切换、备份恢复及容量余量测试;这些结果必须与本工具的受理层样本分开记录。