报告 005 · 分布式接管、执行端重启与旧结果
日期:2026-09-19。证据层次:有限协议模型。共 104 个策略场景,包括 76 个资源接管、10 个分区权威、18 个旧结果场景。没有运行真实复制数据库、网络集群或外部动作。
1. 固定输入与假设
执行前登记实验协议。权威域已将当前执行者从 A 改为 B;旧请求 O 使用代号 1,新请求 N 及其重投 R 使用代号 2,三者对应同一已登记 Effect、同一目标和参数。F 表示新资源代号安装并确认,X 表示执行端重启。
无重启时枚举 F<N<R、O 任意位置,共 4 条顺序;有重启时再要求 F<X,共 15 条。这里 N<R 是预设到达顺序,并未覆盖重投比首次请求更早到达;这属于后续扩展范围。每条顺序比较 4 种策略,共 76 个场景。
理想权威事务、可信请求身份、资源单步原子效果,以及耐久组的“效果和业务去重记录共同持久化”均为模型假设。效果一旦发生,重启不撤销它。模型没有运行中长动作、真实磁盘、时钟和去重保留期。
2. 资源接管结果
| 策略 | 无重启:F 后旧执行路径/4 | 无重启:重复效果路径/4 | 重启:F 后旧执行路径/15 | 重启:重复效果路径/15 |
|---|---|---|---|---|
| 仅协调侧更新权威 | 3 | 4 | 12 | 15 |
| 耐久 fencing,无业务去重 | 0 | 4 | 0 | 15 |
| 内存 fencing + 内存去重 | 0 | 0 | 3 | 7 |
| 耐久 fencing + 原子耐久去重 | 0 | 0 | 0 | 0 |
第一组 F 只是本地标记就绪,并不提供资源端真实屏障;故其“F 后”说明错误地宣布接管完成会怎样。其所有路径产生 3 次效果。第二组无重启效果数为 2 次的 3 条、3 次的 1 条;重启组为 2 次的 12 条、3 次的 3 条。隔离旧控制者没有阻止新请求自己的重复执行。
内存组在 15 条重启路径中,8 条产生 1 次效果,7 条产生 2 次;其中 3 条重新执行了旧控制者请求。耐久组合在全部 19 条顺序中均产生 1 次效果,且 N、R 都获得实际结果或已有回执,没有靠拒绝所有新请求得到零错误。
这些是固定排列的计数,不是故障概率。只有假设真实执行端具备同样的原子性、持久性和身份契约时,才可能获得相应保护;模型没有证明任意提供者可满足它。
3. 三条反例说明保证边界
F → O → N → R。 只在协调侧切换执行权时,旧 O 仍到达资源并执行。资源 fencing 拒绝 O,但没有业务去重时 N、R 各执行一次。因此 AssignmentEpoch、ResourceEpoch 和 Effect 的业务键承担不同责任。
F → N → R → X → O。 内存组在 F 后安装了代号 2,N 执行、R 返回已有结果;X 清空代号与去重表后直接开放接纳,O 以代号 1 再执行,现实效果累计为 2。恢复端不能沿用重启前的就绪声明:需要恢复耐久隔离和去重记录,或关闭写入口重新建立契约。
O → F → N → R。 即使耐久组合,O 也可能在执行端知道新代号之前执行一次;之后 N、R 通过同一业务键取得原结果。这不是“旧请求从协调权切换时起绝不执行”的证明。屏障前窗口必须纳入结果核对,fencing 也不能撤销已开始的长动作。
4. 状态权威与网络分区
固定 a/b/c 三个副本的全部 5 种集合分区:全连通、三种 2+1、全分离。每个连通分区各提出一次写入申请:
| 策略 | 多个独立写入方的分区数/5 | 完全不能共享写入的分区数/5 | 最大独立写入方数 |
|---|---|---|---|
| 各分区自行提任 | 4 | 0 | 3 |
| 只允许理想可写多数侧 | 0 | 1 | 1 |
第二组完全分离时不接纳共享写入,其代价被保留为“没有进展”。它不是 Raft 的实现或证明:没有建模投票、日志、任期、落盘或恢复,只验证当前候选将写入许可放在哪个边界。
5. 旧提交和旧结果要分开
旧 Step 提交、可信旧完成结果及相同结果重投共有 6 种顺序。此前 Operation/Attempt 已登记,结果来源和请求摘要固定合法:
| 策略 | 接纳旧状态写入的顺序数/6 | 丢失合法完成结果的顺序数/6 | 每条顺序唯一结果数 |
|---|---|---|---|
| 拒绝所有旧消息 | 0 | 6 | 0 |
| 接受所有旧消息 | 6 | 0 | 1 |
| 分开验证当前提交权和历史请求结果 | 0 | 0 | 1 |
所有接受结果的组均按相同事件键去重。第三组只保存事实,不授予旧执行权,也没有测试语义结论是否仍正确、是否可自动续接旧动作。错误摘要、伪造结果和跨提供者事件键未覆盖。
6. 设计含义
- 保留强一致指派及条件提交作为状态边界,执行端接管另设安装确认、旧工作核对和就绪记录。
- 资源代号持久性与业务去重分别声明,重启未恢复时关闭写入口;不能因为重启前成功校验过就延用就绪状态。
- 新节点继续原 Effect 的核对/契约允许的重试,不通过换节点、Attempt 或业务键抹掉未知责任。
- 将当前执行权校验与可信完成事件接入分开,旧结果可作为证据交给当前认知判断。
- 失去多数派的共享写入暂停;本地停止与有限离线工作不升级为新的全局授权。
运行:python3 experiments/distributed-handoff/model.py。Python 3.14.7,仅标准库,无网络或随机输入。
源码:model.py;原始数据:distributed-handoff.json。
源码 SHA-256:24e351c00dd9b663e11132d3efb6cd76b6846b51ff8df7f0a78c82fdabbf2a90。结果另存预登记协议 SHA-256、全部顺序、逐事件状态、代表性反例和指标。
首次运行即通过枚举规模、效果计数守恒、结果去重、候选边界和新节点进展断言。通过说明脚本在这些假设下自洽,不是生产正确性或共识验证。
数据可用性
本报告公开实验条件、汇总统计和失败分析。原始输入、脚本及逐次运行记录未随报告发布,因此不能仅凭本文独立复现实验。