58 lines
4.7 KiB
Markdown
58 lines
4.7 KiB
Markdown
# 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 接入交付,也未完成生产高可用和容量验收。
|