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

4.6 KiB
Raw Blame History

P6 长期积压与资源曲线样本

日期:2026-09-20。本批验证计划触发在低执行容量下形成持久化待执行积压,并连续读取 MySQL 中的任务状态计数。它是单节点、一次性数据库的正确性和趋势样本,不是生产容量、SLA、高可用或百万企业承载结论。

场景和结果

在一个隔离命名空间创建 32 个共享起止时间的固定间隔计划,每个计划 8 个触发点,共 256 个任务。使用 1 个 WSS Worker、容量 1;队列只读快照为并发4、每秒授权10。触发全部落库后,Worker 逐步完成任务,工具整体截止 180 秒,故意让积压样本保留未完成分母。

指标 结果
预期/观察触发点 256 / 256
预期/生成任务 256 / 256
完成核验成功 173
未核验任务 83
有效本地处理器调用 173
重复调用 0
最大观察等待积压 249
截止时等待积压 83
退出码 1(预期的 RUN_TIMEOUT)
计划收尾 32 个 pause_confirmed=true
数据库最终任务/成功任务 256 / 173
触发记录重复任务 0
实际外键 0

原始工具报告:sample-256-deadline.json。工具把 expected、occurrences、fired、verified_success、unverified 分开;83 个未核验任务没有被解释成失败、撤销或成功。暂停只阻止新的计划触发,不取消已生成任务,因而最终数据库仍保留待处理任务供后续沿原身份核对。

持久化曲线

工具运行期间每 2 秒通过独立数据库连接读取 pulse_tasks 状态、触发记录和未暂停计划数量。触发集中完成后,occurrences 保持 256;waiting 从最高 249 随 Worker 逐步完成下降到截止时 83,succeeded 从0增至173。曲线原始点见curve.json,最终数据库快照见database.json。采样时间仅用于排列趋势,未混入任务阶段延迟统计。

采样阶段 waiting succeeded occurrences unpaused_schedules
触发前 0 0 0 0
触发完成后早期 242 14 256 32
中段 180 76 256 32
后段 98 158 256 32
截止前最后点 83 173 256 32

本批原始样本没有开启指标监听,也没有独占 CPU、内存、磁盘或数据库资源;因此已保存曲线只证明持久状态和收尾行为,不证明资源消耗曲线。随后脚本已加入临时指标端口和 metrics.jsonl 采样,会在下一次复现中留存服务进程 CPU/RSS、MySQL 容器资源、数据库连接池等待、提交前事务重试/耗尽计数和业务快照计数;新文件仍只是单节点原始采样。目标拓扑容量测试还需要采集锁等待、复制延迟和队列阶段延迟,并进行多轮稳态与恢复对照。

环境与复现

实际工具链 Go 1.25.14 Linux arm64,通过临时 modfile 构建,仓库声明的 Go 1.27.1 未改;一次性 MySQL 8.4.10,Docker VM 12 CPU/12,529,274,880 字节内存,其他容器可能共享资源。服务端、MySQL 和工具共享容器网络命名空间,不发布宿主机端口。源码/二进制/报告哈希和完整参数见environment.json。该二进制来自已提交的 2973459,构建后没有修改源码。

在 SDK 目录使用隔离凭据可复现核心命令:

ORBIT_URL=http://127.0.0.1:$PORT \
ORBIT_CREDENTIALS_FILE=/tmp/schedule-backlog.credentials.json \
./orbit-schedule-load \
  -schedules 32 -requests 8 -workers 1 -capacity 1 \
  -start-delay 5s -run-timeout 180s -poll-interval 100ms

准备阶段必须使用一次性 MySQL、orbit-migrate up、隔离队列和 worker-access/schedule-access 权限;不要把这条命令指向生产队列。命令预期在本样本的速率和容量下以非零退出,并在报告中保留未核验分母。收尾后使用 orbit-admin verify,再从独立数据库连接检查任务状态和外键数量。完整启动/清理方式按定时工具手册执行;仓库提供scripts/test-schedule-backlog.sh,设置 ORBIT_TEST_KEEP_ARTIFACTS=1 可保留报告、曲线和数据库快照。脚本只使用一次性 MySQL,退出0表示预期的工具非零截止结果已核对。

本批没有验证长期运行数小时的存储增长、历史归档、跨节点公平、Worker 重连风暴、MySQL 故障切换、备份恢复或 RPO/RTO;这些仍属于 P6/P7 未完成门槛。