Files
orbit/docs/api/workflow-load.md

44 lines
4.6 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.
# Weave 流程负载测量工具
`orbit-workflow-load` 是 SDK 模块中的隔离测量命令,用于验证一条真实的 Weave 流程链路:创建定义、发布不可变 `v1`、启动多个实例、由独立 WSS Worker 执行两个有限并行分支,再核对持久化流程、步骤、任务、尝试、任务来源和最终输出。
它只使用 Orbit HTTP/WSS 和 MySQL 服务端已有能力,不连接消息队列、缓存或业务数据库;处理器只回显固定输入,不产生外部业务副作用。工具不会自动重试写请求,响应不明时必须保留原运行身份,通过报告中的分母定位未确认实例。
## 使用
先为隔离命名空间签发包含 `workflow-access`、`workflow-run-access` 与 `worker-access` 的凭据文件,再执行:
```sh
ORBIT_URL=https://orbit.example.test \
ORBIT_CREDENTIALS_FILE=/run/secrets/orbit-load.json \
go run ./cmd/orbit-workflow-load \
-requests 100 \
-concurrency 8 \
-workers 2 \
-capacity 4 \
-run-timeout 5m \
-poll-interval 250ms
```
参数上限是 `requests<=2000`、启动/核验并发 `<=128`、Worker 数 `<=32`、单 Worker 容量 `<=256` 且总容量 `<=1024`。`-timeout` 是单次 HTTP 交换截止,`-run-timeout` 是整次样本截止;整次测量另有最多5秒 Worker 收尾。发布的流程、任务及尝试时限使用 `run-timeout`,不再隐式缩短为30秒;任务实际截止还受实例首次绝对截止限制。这些限制都不是生产系统的 SLA。
工具先只读核对队列,不修改队列额度;创建及发布回执必须匹配命名空间、定义名称和完整规范,实例必须绑定本次发布回执的不可变版本 ID。定义名、实例幂等键、业务键和处理器名都带一次运行生成的随机前缀。每个实例固定使用输入 `{"run_id":"...","sequence":N}`,流程输出必须同时包含 `left` 和 `right` 两个相同对象。
## 报告解释
输出为一行 JSON,包含 `attempted`、`accepted`、`verified_success`、`unverified`、`handler_calls`、`unconfirmed_invocations`、`worker_started`、`instances`、`errors` 及 `admission`/`completion` 百分位。`complete=true` 的必要条件是:全部启动调用有唯一回执、全部实例为 `SUCCEEDED`、步骤必须精确为 `pair:PARALLEL`、`left:TASK`、`right:TASK`,全部成功且各自步骤/激活身份唯一;两个分支对应两个不同任务,各有一次成功尝试,来源精确匹配实例、发布版本、步骤键和激活。每个任务必须关联到本地同一尝试的一次调用,不能用同一分支调用两次抵充另一个分支。
输入/输出按精确字段集合校验,拒绝重复键、大小写别名、缺字段、null和尾随JSON;实例序号0也不能通过缺失 `sequence` 字段来冒充。任务命名空间、队列、处理器、策略、输入/结果和各阶段时间顺序全部参与核验。
任何预检、发布、启动、读取、步骤、尝试、来源或截止错误都会保留稳定错误分类并以非零状态退出。空分布的百分位是 JSON `null`,不能解释成零延迟。`completion` 是服务端 `created_at` 到 `completed_at` 的持久化耗时;它不是客户端轮询耗时。
## 原身份与失败核查
`instances` 保留每个实际发起的启动请求序号、幂等键、返回实例 ID、受理错误及持久核验标记;回执不明时 ID 可以为空,不代表未提交。定义创建键/名称为 `orbit-workflow-load-{run_id}`,发布键为 `run_id`,版本名为 `v1`。启动键和业务键都是 `orbit-workflow-{run_id}-{sequence六位十进制补零}`,输入为该 `run_id` 和数值 `sequence`。按原目标、原键及原请求核对,不能重跑整个命令来恢复旧请求。
`verified_success` 只计完成全部持久核验的实例。`duplicate_invocations` 按同一任务的额外调用计数;`unconfirmed_invocations` 是不能对应到已核验分支任务及尝试的调用数,部分实例尚未完成时可以非零。它们不能混算为重复执行,也不能据此宣称外部效果被撤回。本工具无外部副作用,超时只停止本地 Worker 并有界收尾,不自动取消、删除或重置服务器上的实例;保留原实例和任务以供查询。
## 验证边界
该工具适合在一次性 MySQL、测试凭据和明确的资源上限下做正确性、故障分母和阶段延迟验证。单机样本不能证明多节点吞吐、跨故障域高可用、备份恢复、RPO/RTO 或面向生产的容量;生产验收还需要目标拓扑、数据规模、连接池、备份介质、监控采集和发布兼容矩阵的独立证据。