Files
orbit/docs/reports/phase-2-server.md

58 lines
4.7 KiB
Markdown
Raw Permalink 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.
# P2 服务端执行与 WSS 阶段记录
日期:2026-09-17。**这是 P2 的阶段内进展,不是 P2 或生产验收完成。**
## 实现
新增 WorkerInstance 与 AttemptEvidence,当前共 32 个持久化实体。字段、模型职责、单位、可空/秘密/代次语义及 SQL COMMENT 均为中文。新增前向迁移 000003_worker_execution,旧迁移不改写。
服务端现有能力包括进程恢复秘密、会话头与连接代次、能力绑定、容量覆盖和排空、两步领取/开始、尝试秘密、续租、结果回执、迟到证据、跨节点恢复,以及到期扫描。队列并发许可随执行事务领取、续期和释放。
HTTP 进程已注册 Worker WebSocket 入口,并启动受控恢复扫描;使用有界网络队列、消息/连接上限和明确的关闭流程。默认 bootstrap 不扩权,新增 --worker-access 显式为开发凭据增加 Worker 权限。
## 实际回归
环境:macOS arm64,Go 1.27.1,Docker 隔离 MySQL 8.4.10。入口为 make test、make vet、make build、make integration;数据库临时创建并清理,不使用已有业务数据库。
| 场景 | 结果 |
| --- | --- |
| 新迁移与全部 Go 模型字段匹配、前序 P0/P1 回归 | 通过 |
| 开始/续租/结果确认的原消息重报 | 原回执可查,不重复执行状态变更或延长旧续租 |
| 多消息提交同一已保存结果 | 只产生一次结果事件与审计、只释放一次许可 |
| 精确整数与小数结果 | 保存与查询不损失数值内容 |
| 不同节点重连与恢复同一尝试 | 原子迁移会话;次数和许可不增加 |
| 旧会话、错误尝试秘密、错误进程证明、注册内容改变 | 拒绝 |
| 两个实例、两个节点、16 个并发领取请求 | 队列并发 2、进程容量各 1 均不被突破 |
| 重连时旧会话已有执行 | 不重置容量计数 |
| 排空、容量零、重复/冲突序号 | 不给新工作,不误释放已有许可,排空跨重连保留 |
| 前 18 个任务门控暂停,后面有普通任务 | 普通任务仍能被领取,无候选页饥饿 |
| 暂停与开始、已授权开始回执、结果保存 | 未开始被阻止;已开始的原回执和结果仍可保存 |
| 未开始到期、已开始失联、两个恢复节点竞争 | 有限重派/FAILED/NEEDS_REVIEW 正确;无重复释放 |
| 迟到成功、未开始提交结果、冲突结果 | EVIDENCE_ONLY,保留证据,不改写权威结果 |
| 原 start ACK 在结束或过期后重报 | receipt 保留,当前 lease.active=false |
| 单次绝对时限与会话过期 | 续租不能越过限制,过期会话不能靠心跳复活 |
| 获取锁之前进入请求、锁等待期间租约过期 | 不使用早先时钟样本批准开始 |
| 领取事件或完成审计 INSERT 被注入失败 | 任务、尝试、许可、回执、事件整体回滚 |
| 凭据撤销、跨命名空间、已取消 context | 执行控制拒绝 |
| WSS 真 TLS 握手,鉴权/子协议/Origin/URL 规则 | 通过;使用受信任测试证书,不跳过验证 |
| WSS 节点 A 派发开始 → 断开 → 节点 B 恢复 → 结果确认重报 | 同一尝试、一次成功事件、许可正确释放 |
| 重复 JSON 字段、服务关闭与已接管长连接 | 非法帧关闭;节点关闭无残留长连接 |
WSS 测试客户端直接发送协议帧,并显式重连到另一个测试服务器。当前没有把这项测试说成 SDK 自动重连或真实主机宕机演练。两个 ExecutionStore/Hub 使用不同节点 ID、同一个真实数据库;它们位于同一测试进程。
## 事务与恢复约束
每条命令重新校验当前凭据。执行路径先锁进程头/会话,再锁队列、可选门控、任务、尝试;回收从队列开始,不反向锁 Worker。拿到相关锁后重新读取数据库时间。状态、回执、额度和事件在短事务内提交,处理器不会在数据库事务中运行。
会话秘密、执行秘密仅存摘要,普通任务查询与日志不输出原文。保存迟到证据不构成执行授权。粗粒度队列锁是当前正确性基线,需要后续执行计划、压力与公平性验证;没有声称支持某个生产吞吐数字。
## 剩余工作
- Worker SDK 的处理器注册与运行循环、保守租约截止、自动续租、重连、结果重报、优雅退出。
- API/SDK 执行历史与证据查询,WS JSON Schema 和兼容性验证。
- 运行中取消、客户端慢消费及更多网络故障、结果未知/不协作处理器的端到端用例。
- P3 的策略化自动重试、速率和其他配额、调度及结果订阅。
- P4–P7 的流程、运维、性能和最终交付验证。
当前已实现的是可以经 WSS 操作的服务端执行内核。尚未完成独立 Worker 接入交付,也未完成生产高可用和容量验收。