Files
orbit/docs/api/load.md

2.7 KiB
Raw Permalink Blame History

有界受理负载工具

orbit-load 是独立 Go SDK module 中的受理负载工具,用于在隔离环境测量 HTTP 受理请求的延迟分布。它只提交带独立幂等键的任务,不启动 Worker、不执行业务副作用、不自动重试,也不把测量结果解释为生产吞吐或租户容量保证。

需要测量真实Worker及任务完成路径时,使用独立的orbit-exec-load。

运行

先为专用测试命名空间准备凭据,再运行:

cd sdk/go
ORBIT_URL='http://127.0.0.1:8080' \
ORBIT_CREDENTIALS_FILE='/private/orbit-load.credentials.json' \
go run ./cmd/orbit-load \
  -requests 1000 \
  -concurrency 32 \
  -timeout 10s

标准 MySQL 集成脚本默认使用24次、4并发的冒烟样本;需要复现扩大隔离样本时可执行 ORBIT_TEST_LOAD_REQUESTS=1000 ORBIT_TEST_LOAD_CONCURRENCY=32 make integration。该环境变量只改变测试脚本的请求数量和并发,不改变服务端或 SDK 契约。

也可以直接传 -url、-token 和 -queue。命令拒绝非 32 位小写十六进制队列 ID,默认上限是 100000 次请求和 1024 个并发请求;并发数超过请求数时自动降到请求数。每次请求的超时独立计算,超时或 HTTP 错误不会再次提交。

每个任务使用形如 orbit-load-{run_id}-{sequence} 的幂等键,输入只包含本次运行标识和序号,处理器默认为 load.noop,任务尝试预算固定为 1。命令不会删除生成的任务;测试必须使用一次性数据库或专用命名空间,结束后按保留策略处理,不能直接对生产命名空间运行。

输出

标准输出是一行 JSON:

{"started_at":"2026-09-19T00:00:00Z","finished_at":"2026-09-19T00:00:02Z","requests":100,"concurrency":8,"success":100,"errors":0,"p50_ms":11.2,"p95_ms":24.7,"p99_ms":31.4,"max_ms":35.1}

p50_ms、p95_ms、p99_ms 和 max_ms 统计所有请求(包括失败请求)的端到端 HTTP 交换耗时,百分位采用最近秩;error_codes 只保留有限错误分类,例如 TIMEOUT、TRANSPORT、HTTP_409 或服务端稳定错误码,不输出令牌、请求体或内部错误文本。存在失败请求时仍输出报告,并以非零状态退出。

解释边界

这项工具固定的是客户端请求数、并发和消息形状,不能替代以下验证:真实 Worker 执行吞吐、定时触发、流程推进、数据库锁等待、复制延迟、磁盘与网络 I/O、故障恢复、跨主机拓扑或长时间积压。正式容量报告必须同时记录硬件、MySQL 拓扑、连接池、数据量、任务时长、结果大小、故障注入和积压清空时间,并将本工具结果与其他阶段指标分开。