调和灰度发布与恢复
调和(Reconciliation)应分阶段启用。持久化的 Hub 状态是运维人员的事实来源; 节点上报只是观测,绝不能改写期望目标。
灰度发布阶段
- 仅观测:持久化上报并比较期望与观测,但不分发新的 Attempt。检查代际(generation)不匹配、过期节点与配置版本漂移。
- 单节点:为某个节点启用生命周期调和,使用幂等的启动/停止命令。确认离线期间写入的期望状态保持持久,且重连后会向当前代际收敛。
- 配置:在理解生命周期收敛之后,启用配置应用/回滚。只有当节点上报了目标版本,且每条受影响的 Stream 都满足其期望代际与状态后,配置 Intent 才算到达终态。
- 机群:逐步扩展,同时关注被阻塞的 Intent、重试次数、租约过期与调和延迟。
故障与重启行为
临时性传输/节点故障会保留期望状态并安排退避重试。永久性执行失败会变为 blocked,
需要新的代际,例如修正后的配置或回滚。放置拒绝同样按“失败即关闭(fail closed)”处理:
目标节点未全部宣告 network_shuffle 能力与数据地址的 split 放置会在分发前被拒绝,
不会发出部分 job_start。结果丢失的已分发 Attempt 会变为 ambiguous;Hub 不会盲目重放它。
出现分歧的 Intent 需要更新的完整上报后才会获得新的 Attempt。
Hub 重启时,持久化的 Intent 与 outbox 行会被恢复。排队的工作可以继续。 已过期分发的 Attempt 保持模糊状态,直到新的 Agent 上报确认目标是否已经生效。 这样可以避免重复执行重启或其他一次性动作。
计划内节点排空
排空(drain)节点改变的是可用性,而不是运维意图。Hub 应停止向排空中的节点分发新工作, 同时保留期望的 Stream 状态。节点重新上线后,注册/上报事件会恢复当前代际的调和。 希望 Stream 保持停止状态的运维人员必须显式写入停止的期望状态。
回滚
回滚是一个新的配置 Intent 与新代际。它不会删除失败的版本,也不会改写之前的观测上报。 原操作连同其失败类别与关联 ID 保持可见,新版本则被独立跟踪,直到观测到收敛。