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

48 lines
5.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 Weave 流程执行测量
验证日期:2026-09-20,最终运行 UTC 06:05–06:06。一次性 MySQL 8.4.10 中的隔离正确性与阶段耗时样本,P6/P7 仍进行中,不作为生产容量或高可用验收。
## 本轮修正
原测量按每个实例的处理器总调用数核对两个分支,对重复分支、任务身份和本次发布版本的约束不足;输出中序号0还可能由缺失字段被解码为零值。本轮改为精确链路核对:
- 发布回执必须匹配命名空间、定义身份、完整规范;实例绑定本次发布的不可变版本ID,输入和首次绝对截止不变。
- 步骤精确为 `pair:PARALLEL`、`left:TASK`、`right:TASK`,全部成功,步骤和激活身份唯一;左右分支必须关联不同任务。
- 任务的队列、命名空间、处理器、策略、输入/结果、固定截止与时间顺序一致,每任务恰有一个成功尝试;来源匹配该实例、版本、步骤键和激活。
- 每个已核验任务对应本地同一尝试的一次调用。一个分支执行两次不能抵充另一个分支;尚不能关联的调用单独报告。
- 精确JSON字段集合拒绝缺字段、null、重复键、大小写别名和尾随JSON,序号0也必须明确提供。
- 发布的流程及任务时限使用 `run-timeout`,移除原工具中未公开的30秒截断;报告增加每个启动请求的原键、实例ID、受理错误及核验标记。
此前24实例记录没有形成最终源码与所运行二进制的可靠对应,不能用于证明本轮实现。当前原始样本已由**重新构建的二进制**运行并替换旧证据;旧内容可从Git历史追溯。本轮环境清单同时保存源码、实际二进制及原始结果哈希,构建后没有修改这些源码。
## 实际结果
工具通过独立 SDK 创建定义、发布固定 `v1`、启动流程,用2个真实 Worker回显固定输入,随后逐项读取流程、步骤、任务、尝试与来源。任务最多一次尝试、`RECONCILE_ONLY`,处理器无外部副作用。任何写请求都不由工具自动重试,队列额度只读。
| 样本 | 请求/受理 | 持久核验成功/未核验 | 本地调用 | 重复/未确认调用 | 完整/退出码 |
| --- | ---: | ---: | ---: | ---: | --- |
| 24实例,90秒截止 | 24/24 | 24/0 | 48 | 0/0 | true / 0 |
| 100实例,90秒截止 | 100/100 | 100/0 | 200 | 0/0 | true / 0 |
| 24实例,2秒截止 | 24/24 | 2/22 | 4 | 0/0 | false / 1 |
原始结果:[24实例](data/phase-6-workflow-load/sample-24.json)、[100实例](data/phase-6-workflow-load/sample-100.json)、[截止负例](data/phase-6-workflow-load/deadline-24.json)。两组正常样本错误集合为空;负例报告 `RUN_TIMEOUT=1`、`VERIFY_TIMEOUT=22`,22个实例保留原身份且未算成功。截止后只停止本地 Worker,不取消服务器实例;该快照不证明未核验工作已撤销或最终失败。
| 正常样本 | 受理往返P50/P95/P99 | 数据库实例创建至完成P50/P95/P99 |
| --- | --- | --- |
| 24实例 | 47.694 / 56.059 / 64.540ms | 7874.268 / 12805.768 / 12816.559ms |
| 100实例 | 65.156 / 70.222 / 71.857ms | 23486.790 / 39126.668 / 42091.211ms |
100实例样本中最长流程持久耗时42101.309ms,超过旧工具的30秒隐藏上限,在此次90秒配置下仍正确完成。分布只统计完整核验成功实例,不混入客户端轮询等待;该观察不能推导目标生产吞吐。
## 环境、回归及复现
单节点 Orbit、一次性 MySQL 8.4.10,1个负载进程中2个Worker。队列并发4、每秒授权10,工具不改额度。24/100正常组请求并发分别6/8,每Worker容量4;负例并发6、每Worker容量2。每次HTTP截止5秒,轮询100毫秒。指标关闭,容器共享本机Docker VM,无独占CPU/内存限制;Go进程与MySQL共享网络命名空间,仅回环通信,无宿主机发布端口。
实际工具链为 **Go 1.25.14 Linux arm64**,通过临时modfile使用;仓库声明的Go 1.27.1未改。SDK全模块 `go test -race ./...`、`go vet ./...`、`go build ./...` 通过,见[检查日志](data/phase-6-workflow-load/sdk-check.txt)。新增回归覆盖:发布版本替换、精确步骤/激活/任务身份、错误任务策略/队列/截止、缺失/额外尝试、错误来源和时间顺序、并发本地调用、同一分支重复不能抵充第二分支,以及序号0的严格字段解析。
真实样本后 `orbit-admin verify` 确认schema version28、28条迁移记录、6个必需索引及**外键0**,见[结构核验](data/phase-6-workflow-load/schema.json)。本轮没有修改数据库模型或迁移。
精确参数、工具链、资源和源码/二进制/结果哈希见[环境清单](data/phase-6-workflow-load/environment.json)。按[调用手册](../api/workflow-load.md)准备一次性数据库和带 `workflow-access`、`workflow-run-access`、`worker-access` 的隔离凭据,使用当前源码重新构建工具,再运行环境清单中的三组参数;退出码应为0、0、1。标准 `scripts/test-mysql.sh` 保留6实例回归入口,本轮未重跑整份集成脚本。
长期积压已有独立[积压与曲线样本](phase-6-backlog.md),本批不覆盖目标Go 1.27.1标准全量、跨标签SDK/服务端兼容矩阵、多节点吞吐、跨故障域恢复、生产连接池容量、RPO/RTO或发布审批;这些门槛继续按P6/P7完成。