30 KiB
Orbit 持续开发与回归计划
更新:2026-09-20。此计划对应持续开发目标,由开发过程同步维护。数据库已按用户要求采用无外键设计,迁移 000008 移除历史外键,关联一致性由服务端事务保证。
1. 最终交付目标
交付可由多个业务项目接入的 Go + MySQL + HTTP/WebSocket 平台:Pulse 管理任务与调度,Weave 管理持久化流程,业务处理器运行在独立 Worker。研发通过独立 Go SDK 定义和发布流程。
完成标准包括服务端、SDK、迁移及运行工具、Markdown 接口手册、可运行场景示例,以及实际正确性/故障/性能验证记录。完成设计、单机运行或展示一条正常路径,均不等同于完成首版交付。
仓库内的开发回归统一入口为 make release-local-check,它只负责可重复的本地门禁;真实 MySQL 全量回归使用 make integration,目标拓扑生产验收仍按交付清单单独留证。
1.1 当前交付快照(2026-09-20)
当前不是“还剩一半代码”的状态,而是核心平台已经进入生产验收阶段。为避免把代码完成度和上线完成度混在一起,按三层记录:
| 层级 | 当前结论 | 依据 |
|---|---|---|
| 核心功能 | P0–P5 已完成阶段验收 | 真实 MySQL、服务端/SDK、Worker/流程进程故障、恢复与可运行示例回归 |
| 发布准备 | P6–P7 大部分完成 | 观测、凭据操作、备份恢复、数据库短暂不可用、GTID 手工提升、容器发布物、协议门禁和独立 SDK 门禁 |
| 正式生产 | 尚未放行 | 目标拓扑容量、自动故障切换、RPO/RTO、跨标签兼容、生产密钥/告警/值守、保留归档策略仍需目标环境证据 |
剩余工作按以下顺序推进,任何一项没有对应输出、工单或演练记录,都保持“未验收”,不把本地通过写成生产保证:
- 冻结目标环境:确定 MySQL 拓扑、故障域、实例规格、连接/任务/流程峰值、数据保留周期和 RPO/RTO。
- 完成目标环境演练:执行容量、慢消费者/重连风暴、数据库自动切换、备份介质恢复和滚动升级,记录 p50/p95/p99、资源曲线和失败分母。
- 关闭运维门槛:完成生产密钥托管、最小权限、告警通知、值班响应、回滚/前向修复和审计留存演练。
- 关闭发布门槛:使用正式标签跑旧 SDK/新服务端、新 SDK/旧服务端的完整协议矩阵,冻结镜像摘要、迁移账本、版本身份和发布审批。
- 评审清理策略:明确幂等、事件、审计、交付和流程历史的保留/归档格式,再决定是否实现任何写入型清理;当前只读盘点不会删除数据。
上述第 1–4 项完成并留证后,才可以给出正式生产容量和高可用结论;第 5 项在策略未批准前不进入自动删除实现。
2. 持续推进方式
每个阶段按以下顺序推进:
- 根据已确认功能细化状态、协议、数据及完成标准。
- 完成一条可执行的业务无关调用链,同步 SDK 和文档。
- 运行单元、真实数据库、协议及端到端回归,记录失败与修复。
- 验证该阶段异常路径、兼容性、授权边界与可恢复性。
- 更新本计划、接口实现状态、示例和验证报告,再进入下一阶段。
常规技术选择和缺陷修复自主进行。只有确实缺少外部信息或涉及未获授权的操作时才请求用户介入。不能为了让目标显示完成而隐藏未实现项或跳过故障验收。
3. 阶段清单
| 阶段 | 开发内容 | 回归与完成标准 | 当前状态 |
|---|---|---|---|
| P0 基础与数据模型 | Go workspace、独立 SDK module、公共/Pulse/Weave 模型、MySQL 迁移、配置、健康检查 | 编译/竞态/静态检查;真实 MySQL 建表、隔离、唯一性、预算、不可变版本、迁移失败防护;SDK 健康调用 | 已完成并通过阶段回归(见 P0 报告) |
| P1 任务受理闭环 | 应用凭据与作用域权限、队列、幂等提交、查询、待执行取消、受理事件;SDK 客户端 | API/SDK 创建查询闭环;重复键与内容冲突、响应未确认重报、跨命名空间拒绝、参数边界 | 已完成并通过阶段回归(见 P1 报告;真实断路/提交 ACK 丢失注入留后续故障阶段) |
| P2 Worker 执行闭环 | WSS 接入、能力/容量、领取与开始、租约、续租、结果确认、排空与恢复;Worker SDK | 真 Worker 执行;失联/重连/重复确认/旧尝试拒绝;业务效果未知转核查;节点故障接管 | 已完成并通过阶段回归:服务端、自动 SDK、历史查询、完整 Schema 与真实进程强杀恢复;测试拓扑和剩余生产故障矩阵见 P2 验收报告 |
| P3 Pulse 完整能力 | 安全重试、延时、Cron/固定间隔、漏跑策略、计划版本、运行中取消、并发许可、配额/背压、可靠结果订阅、批量受理、独立任务核查/人工重试、查询筛选与事务Outbox接入 | 多实例领取/触发竞争、重试上限、取消竞争、队列隔离、积压恢复、事件重复交付 | 已完成平台功能阶段验收:原范围逐项核对、本轮完整回归。补齐相对延迟、改参数关联示例和四种重试全停恢复场景;20个可运行示例全部通过。全平台生产门槛及SDK首版交付剩余项仍按P6–P7推进 |
| P4 Weave 主流程 | SDK 定义构建与发布校验、实例、顺序/分支/结构化并行汇合、信号/定时等待、版本绑定 | 重启接续、早到/重复信号、并行竞争、内部事件重放、发布版本兼容;端到端通用流程 | 已完成平台功能阶段验收:原功能及W01–W17逐项核对、版本/暂停/全停回归、提交故障边界。研发发布、固定版本、顺序/分支/有限并行、信号/时间等待、公共API/SDK及可运行示例均已交付;生产拓扑与发布兼容继续P6/P7 |
| P5 Weave 恢复与查询 | 有界查询、暂停继续、取消、人工核查恢复、控制门控与审计 | 轮次与尝试独立预算;暂停/开始/回执/超时竞争;恢复保留预算;未知结果不盲目重复 | 已完成平台功能阶段验收:原功能核对。有界查询、独立预算、暂停继续/取消、六类恢复、历史/筛选/事件/来源与SDK场景均已交付;真实竞争、COMMIT断线及进程全停保留原身份、截止和预算。运维、容量与首版发布继续P6/P7 |
| P6 生产验证与运维 | 完整监控、凭据轮换、备份恢复、滚动升级、运行手册、可复现负载和故障工具 | 对照生产验收清单执行,报告环境/指标/遗留项;容量、RPO/RTO 按真实拓扑验证 | 进行中;已补精确故障边界和进程观测;继续业务积压/阶段延迟、凭据轮换及其余生产门槛 |
| P7 首版交付核对 | SDK 兼容与发布准备、完整 API 手册、场景示例、全量回归及交付清单 | 新接入者按文档跑通全部示例;所有首版能力可追溯到实现与测试;报告实际生产边界 | 进行中;已补通用文件转换示例、SDK独立发布门禁、当前协议兼容矩阵、历史任务 API 双向演练、当前回归状态、首版交付核对清单、发布物身份清单和容器发布说明,镜像已完成 linux/amd64 构建验证,节点版本身份可由 /version 核对;verify --manifest 已可在数据库核验前绑定候选二进制身份;仍需带标签的完整跨版本矩阵和目标拓扑验收 |
SDK、文档与示例随 P1–P5 同步开发,P7 是全量核对,不是最后才开始补文档。
P4/P5定时等待与后续查询轮次的实现及回归记录见时钟报告。外部信号与最终查询竞争见信号报告。公共实例、控制、信号、六类恢复和操作审计已接入HTTP与独立SDK,见公共接入报告。流程任务来源及历史查询已接入,实例筛选分页已接入,状态事件时间线已接入,独立轮询/恢复示例已接入,功能验收与生产边界见P4/P5核对。
P4/P5 已交付功能核对
- 已实现FAIL_AFTER_SETTLED与显式取消的内部分支结清,见控制报告:持久取消意图、复用Pulse取消、收集已发出查询/任务结果、等待全部已激活工作结清后才进入失败或取消终态。效果未知仍保留核查。
- 已实现实例暂停/继续/取消内部操作,以control_revision、操作幂等身份、明确原因及审计保护控制决定;暂停不延长原截止,继续不覆盖核查或取消状态。
- 已实现内部执行核查、步骤结论、解除核查及TASK新激活和旧激活隔离,见核查报告。POLL跨激活恢复已实现(见查询恢复);核查后PENDING接续和独立等待重建也已接入内部服务,保留原预算、轮次、结果和证据。
- 实例/当前步骤/信号/控制/六类恢复及流程操作审计HTTP和独立SDK已接入,步骤查询返回实际激活代次;并行执行与信号回执场景已有可运行示例。激活/轮次/信号历史及信号资源审计已接入;实例筛选分页已接入;状态事件时间线已接入;独立轮询及恢复示例已接入,已补W06/W09/W14/W15专项回归;Pulse任务流程来源已交付。逐项验证原键恢复、权限、版本冲突、竞争与进程全停。
- 转入P6/P7的生产故障、容量、运维、发布与全部文档核对。内部存储阶段通过不会提前勾选公共接口或生产验收。
公共接入按以下调用链推进;本批已接入启动/当前详情、控制、信号、六类恢复和流程操作审计,并提供独立SDK及基础示例。任务流程来源和有界历史查询也已接入。实例分页和独立查询示例已接入;状态事件时间线已接入;P4/P5功能阶段已按逐项核对验收;剩余生产门槛继续P6/P7:
| 调用链 | 已交付内容 | 验收重点 |
|---|---|---|
| 启动与读取 | 显式固定版本启动、当前实例、步骤及当前激活代次;已补有界历史读取及实例筛选分页 | 原键丢回执恢复、当前权限、读取快照一致性、未激活步骤语义 |
| 控制与信号 | 暂停/继续/取消、固定步骤和代次的信号提交及原受理回执 | control_revision与通用revision区分、迟到/旧代次、暂停期间结果收集 |
| 核查与追踪 | 六类恢复、激活/轮次/等待/信号历史读取及信号管理审计已接入;状态事件时间线已接入;Pulse任务流程来源已交付 | 当前实例/步骤/任务版本、证据和显式声明、旧历史保留、有界响应和权限隔离 |
| 通用接入场景 | 并行汇合、外部回执、有限轮询、暂停核查恢复的可运行SDK示例 | 真实Worker执行、完整进程退出后接续、未知效果保留、全链路回归 |
接口只使用已经落地的内部事务规则;SDK保持独立module,不能引用服务端模型或数据库实现。生产故障及容量结论仍由P6专门验收。
P6 首批实施顺序
- 已补首批可复现故障工具:A04“派发已提交但消息尚未送达”、W01/W13事务提交结果不明,以及W16最终回执/旧PENDING结果重放/下一轮竞争。迁移器同时提供当前版本无外键新装基线;每个切点必须有实际数据库或进程证据,不能用响应错误推断事务是否已提交,也不能用普通SIGNAL竞争替代最终查询场景。
- 已实现基础运行观测及有界业务状态与事件采样:HTTP/WS、数据库连接池、后台批次、固定任务/交付/流程/Inbox状态计数、最近事件类别、终态耗时样本、固定事件阶段耗时、最早年龄、截断/新鲜度指标和可离线验证的告警规则;独立采集监听默认关闭,固定指标目录拒绝动态标签;发布前只读结构核验由
orbit-admin verify提供,运维人员也可用orbit-admin observe snapshot获取同一有界单节点快照;后台循环间隔、批量上限、Worker/Event连接上限、Hub领取协程和有界内存排队均支持有界环境配置,并在启动日志和固定指标中记录。仍需端到端外部效果延迟、全局持久吞吐、Inbox从事件产生到推进完成的精确阶段延迟、全局发送队列、多节点聚合及生产采集/通知验证;SDK受控重连风暴和真实慢消费者背压已补边界回归与慢消费者报告,跨节点重连仍待目标拓扑。 - 已补齐受保护管理环境中的固定凭据操作文件、轮换、撤销、提交不明故障切点、幂等回执和脱敏管理审计;轮换保留授权绑定并要求新令牌重新建立会话,旧 Worker 会话被排空且立即过期,撤销允许在停用范围内执行且不改写历史记录。已用一次性 MySQL 定向验证旧令牌失效、新令牌重绑和零外键;仍需多节点安全重绑演练、凭据最小权限配置核对和生产密钥托管/审计演练。
- 已补
orbit-admin retention inventory只读盘点和阶段报告,能区分过期幂等、确定终态、未知效果、未终结流程、已确认/未确认交付、已消费/未消费Inbox、事件和审计规模;它不执行归档或删除。已补容量模型,把企业数转换为任务、流程、事件、连接、写放大和保留期输入;仍需评审各类保留周期、归档格式、受保护记录核对,再执行备份恢复、兼容升级和六类容量负载。未确认交付、有效幂等身份、当前/历史执行证据和未终结流程不能被普通清理破坏。生产HA及RPO/RTO继续按实际拓扑验证,不缩减为本机多进程检查。 - 已补
orbit-load有界受理负载工具及24次/1000次隔离样本,见受理报告。新增独立orbit-exec-load,通过真实Worker、任务结果和尝试历史核对,提供短/混合/中长任务的受理、排队、授权执行及完成耗时分布;具体环境、原始JSON和失败分母见执行测量报告。新增orbit-workflow-load,用本次发布版本的双分支并行流程,逐个核对不同任务、唯一尝试、来源、精确输出与本地调用;24/100实例及24实例截止负例已重新构建回归并绑定源码/二进制哈希,见流程测量报告。新增orbit-schedule-load,已完成24/128次定时集中触发与24次计划量的截止负例,保存实际分母、唯一任务/尝试、来源与暂停收尾证据,见定时测量报告。Go 1.27.1 模块级门禁、MySQL 存储集成、关键 SDK/Orbit 进程故障组、24个可运行 SDK 示例真实服务串跑和 result-inbox/task-outbox 真实业务集成已复跑通过。已补长期积压与资源曲线样本:32×8 共256个触发点,在1个Worker/容量1和180秒截止下保留173个成功、83个未核验任务,并以独立数据库读取记录等待积压曲线;该单节点样本不替代目标拓扑容量。SDK受控重连风暴及真实慢消费者背压已补边界回归;下一步补指标采集对照、长期存储增长、跨节点重连与目标数据库拓扑容量。 - 已补隔离备份恢复演练:源库和恢复库均为一次性 MySQL 容器,Go 1.27.1 构建的当前二进制在逻辑备份恢复后核对迁移账本、核心记录数量、固定索引和零外键;证据见恢复报告。该演练不替代生产备份介质、复制切换、跨版本恢复或 RPO/RTO 验收。
- 已补A18 数据库短暂不可用恢复演练:Go 1.27.1 构建的当前二进制在数据库停止期间返回 readiness 503,同卷恢复后返回 200,并用原权限范围继续受理任务;证据见数据库恢复报告。该演练不替代主从切换、复制确认、跨故障域或 RPO/RTO 验收。
- 已补MySQL GTID 复制与手工提升演练:隔离源库/副本通过真实 Orbit HTTP 受理任务,源库停止后副本提升、结构核验和原幂等键重放通过;自动故障切换、复制延迟上限、目标拓扑及 RPO/RTO 仍待验收。
P3 功能范围核对
可靠订阅链路完成后,重新对照 原功能范围 和 事务衔接设计,以下原定首版能力已按核对结果补齐;进一步发现的相对延迟与改参数关联示例也已交付。P3验收逐项保留实现证据及尚待P4–P7完成的原范围,不按已有模块反推全平台完成。
| 核对项 | 当前证据与后续交付 |
|---|---|
| 相对延迟与退避全停恢复 | 已实现delay_ms、数据库计时与原回执恢复,调用示例和回归记录同步;四种真实进程场景保持原退避、预算、截止与未知效果 |
| 改参数形成关联新任务 | 查询示例以新提交身份和相同business_key创建不同参数任务,逐项读取确认旧输入保留;不自动取消原任务,也不冒充人工retry_of |
| 批量任务受理 | 已实现批量API、独立SDK及补交示例;真实MySQL部分失败与HTTP响应丢失用例已通过,同键并发20轮及全量回归已通过,见报告 |
| 独立任务人工核查与重试 | 已实现管理API及SDK、专门权限、显式安全声明、证据/版本/审计和关联新任务;完整场景及回归报告同步交付 |
| 任务查询筛选 | 已实现业务键及创建时间查询,v2游标绑定全部筛选、旧游标受限兼容、四种索引路径与完整场景;回归报告同步记录 |
| 任务详情来源追踪 | 已实现独立来源接口、SDK和普通/计划/人工恢复场景,返回计划及触发固定版本;同命名空间归属、当前权限和来源缺失拒绝已通过全量回归,流程来源已按专项报告接入 |
| 业务到平台的事务Outbox接入 | 已实现独立业务模块及完整接入,覆盖业务变更/待发请求同事务、有限发送恢复、CLI及真实HTTP/MySQL/进程故障,见报告;核心SDK保持无ORM/数据库依赖 |
A04派发已提交而消息尚未到达Worker的精确进程故障已通过专项回归。慢消费者/重连风暴、多节点凭据安全重绑、历史清理、全量监控/容量与MySQL故障切换继续按P6执行;Weave通用执行门控/内部事件接续已实现,不将外部结果订阅当作内部流程引擎。
P3 事务Outbox接入的验收范围
以下内容已由独立业务示例实现并进入回归,实际证据见Outbox报告。P3整体范围已另行逐项核对,下表保留该子项的验收要求:
- 独立业务示例module,以业务记录和待发请求同一个MySQL事务提交;核心SDK保持无ORM/数据库依赖,业务表示例也禁止外键,字段提供中文注释。
- 同时冻结目标命名空间/队列、原幂等键、完整请求及内容摘要。相同业务操作重报不新建待发项,内容不同必须冲突;凭据原文不能进入Outbox或日志。
- 提交、领取与确认分别使用短事务;HTTP在事务外执行。多发送进程通过数据库租约及递增代次协调,旧代次不能覆盖新结果;重启后继续读取持久化待发项。
- 平台已受理但响应丢失、业务COMMIT回执未知、发送进程退出,都必须用原身份核对。只确认平台受理,不将受理标记当作业务执行成功。
- 退避、发送次数及总发送期限均有上限,补发窗口不超过平台幂等保留期;权限、内容冲突、预算耗尽和不能可靠确认的响应需保留可核查记录,不生成新键绕过。
- 真实数据库回归覆盖业务回滚、并发重复、发送竞争、过期租约、迟到确认和原始数字精度;真实HTTP丢响应、MySQL COMMIT响应丢失和发送进程SIGKILL后恢复一并验收。
- 提供完整初始化、提交、运行/恢复、状态核对及失败处理命令;接入全量回归,记录实际测试证据,并纳入P3范围核对。
4. SDK 与示例交付清单
| 场景 | 预期调用链 | 所属阶段 |
|---|---|---|
| 健康检查 | 创建客户端 → 存活/就绪查询 | P0 |
| 文件转换任务 | 提交幂等任务 → Worker实际转换 → 查询结果 | 已补通用CSV→JSON Worker示例;大文件对象引用、外部效果核查与生产容量仍按接入方和P6/P7验收 |
| 相对延迟执行 | 受理时按数据库时间等待 → Worker实际执行 → 历史时间核对 → 原键重报不重计时 | P3,已实现完整示例 |
| 有限安全重试 | 明确失败 → 持久化退避 → 新尝试 → 查询完整历史 | P3,已实现完整示例 |
| 定期数据同步 | 发布计划 → 触发任务 → 暂停/恢复 → 查看触发记录 | P3,已实现通用快照示例 |
| 运行中取消 | 保存取消意图 → 停止处理器 → 确认结果 → 查询并排空 | P3,已实现完整示例 |
| 队列限速与背压 | 暂停 → 满额拒绝 → 原回执核对 → 释放空间 → 限速执行 | P3,已实现完整示例 |
| 跨命名空间应用配额 | first 受理 → second 全局满额 → 释放 → 原键成功 → 恢复配置 | P3,已实现完整示例 |
| 跨队列共享资源 | 两队列同键 → 一个有效许可 → 递增序号 → 资源端拒绝旧写入 | P3,已实现完整示例 |
| 优先级与应用隔离 | 近同时到期按优先级 → 旧任务等待补偿 → 应用/队列轮转 | P3,已实现完整示例 |
| 可靠结果订阅 | 冻结结果 → 持久化交付 → Inbox 去重 → 确认/补发 → 耗尽后人工重试 | P3,核心、HTTP/WSS、管理及消费 SDK、独立Inbox示例与真实进程故障回归已完成 |
| 批量文件作业受理 | 逐项身份 → 部分结果 → 同键核对 → 释放额度 → 只补交失败项 | P3,已实现完整示例 |
| 业务事务Outbox | 业务记录/请求同事务 → 原键发送 → 受理/业务关联同事务 → 故障恢复 | P3,已实现独立模块与完整示例 |
| 业务操作定位 | 精确业务键 → 创建区间 → 游标分页 → 查询详情 | P3,已实现完整示例 |
| 独立任务人工恢复 | 未知结果 → 证据核查 → 保留原任务 → 关联新任务 → 审计查询 | P3,已实现完整示例 |
| 研发定义发布 | 六类节点描述 → 校验/发布 → 原键确认 → 新版本 → 读取旧版本 | P4定义子项,已实现示例 |
| 并行生成结果 | 发布流程 → 并行执行 → 汇合 → 完成 | P4,已实现示例 |
| 审核与外部回执 | 提交流程 → 等待信号 → 授权信号注入 → 继续 | P4,已实现模拟外部回执示例;实际外部系统由接入方对接 |
| 外部作业轮询 | 提交一次 → 有界查询处理中状态 → 回执或最终结果 → 超限核查 | P5,已实现轮询与耗尽示例 |
| 暂停与人工恢复 | 暂停 → 保存结果 → 核查/恢复 → 查看审计 | P5,已实现断线后的核查与暂停恢复示例 |
| 故障恢复 | 节点/连接中断 → 相同身份核对 → 恢复或人工核查 | P2–P6 |
| 执行历史核对 | 读取尝试 → 查看冲突/迟到证据 → 对照权威结果 | P2,已实现完整示例 |
每个正式示例需要:前置配置、完整可运行源码、启动命令、输入、预期输出、失败路径、幂等/清理说明。SDK API 尚未实现时,文档只能标为规划,不能给出伪装可运行的代码。
5. 回归规则
- 每次模型或迁移变化:执行真实 MySQL 集成测试,验证外键为 0、服务端关联归属、唯一约束与升级数据保留。
- 每次状态或协议变化:更新服务端、SDK、兼容说明与异常场景。
- 每次执行/恢复变化:增加对应断线、超时、重复、迟到、宕机或竞争用例。
- 每次发布候选:全量回归、示例回归、迁移检查、故障和负载报告。
- 验证失败先修复再推进,未执行的项目明确记为未验证。
6. 性能与高可用验收边界
不直接用租户总数作为容量结论。P6 先固定硬件、数据库拓扑、消息大小、任务时长、连接数、峰值与积压模型,再记录受理/派发/推进/恢复的吞吐、延迟和资源消耗。
本地多实例与故障注入可以验证恢复逻辑;实际生产复制确认、跨故障域部署、备份介质、RPO/RTO 及峰值余量,需要在对应部署环境复测。所有报告分别标注已验证、未验证和当前限制。
7. 文档入口
状态事件时间线子项
已接入流程/步骤/信号状态事件的公共HTTP、独立SDK、原元数据详情与完整运行例子。000025仅派生索引,历史原字段保持;新增信号转换与状态同事务,批量失败整体回滚。当前阶段验证见时间线报告,P4/P5原功能范围及独立POLL/人工恢复示例已验收,提交故障及竞争证据见专项报告,P6/P7仍未完成。
P4/P5 阶段结论与下一批
逐项证据与生产边界已落表,P4/P5平台功能阶段验收通过。W06/W09/W14/W15真实竞争和全停、A04未送达、W01/W13提交断线及W16旧结果重放竞争均有对应回归,不重复列为待开发。下一批首先补运行指标与告警依据,再按上方P6顺序推进凭据轮换、保留/归档、容量、备份恢复与生产数据库故障验证;P7负责剩余场景和版本发布。完整首版目标保持进行中。