# P6:受理层有界负载工具 验证日期:2026-09-20。本批新增 `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` 会再次执行相同负载样本并把输出纳入全量日志。 ## 扩大隔离样本 为避免只保留冒烟级样本,使用同一工具在 macOS arm64(12 个主机逻辑 CPU)、Docker MySQL 8.4、单个 Orbit 进程、Go 1.25 临时兼容模块和共享网络命名空间中提交 1000 个任务;并发32、单请求超时10秒,未启动 Worker。数据库、凭据、服务进程和任务均在测试结束后销毁。 实际输出: ```json {"started_at":"2026-09-19T18:05:35.166979462Z","finished_at":"2026-09-19T18:05:37.964063213Z","requests":1000,"concurrency":32,"success":1000,"errors":0,"p50_ms":79.260709,"p95_ms":154.177542,"p99_ms":195.787458,"max_ms":333.219167} ``` 1000 次受理全部成功,样本墙钟约2.797秒;这只能说明该隔离拓扑和请求形状下的受理行为,不能换算为生产吞吐、Worker执行吞吐、流程推进能力或百万企业容量。正式容量仍需固定目标硬件、连接池、数据量、任务/流程混合模型、积压恢复和数据库复制故障。 ## 未完成的生产验收 仍需在固定硬件和目标拓扑中补充短/中/长任务混合、Worker 连接与重连、定时集中触发、流程推进、慢消费者、长期积压、数据库锁等待、复制延迟、故障切换、备份恢复及容量余量测试;这些结果必须与本工具的受理层样本分开记录。