这个作品同时在两个世界里讲同一套机制:一个是可反复播放的确定性演示台(讲「机制是什么」), 一个是 2026-09-19 那天在真机上做的一次性现场(给「读数是多少」)。 这一页把同一件事在两边各放一遍 —— 逐条对账。
对账规则只有一条:能对上的写下「对上了」,对不上的如实写明边界。 模拟不承诺时长与性能,真机也不承诺覆盖全部场景 —— 两边各自缺什么,这一页都不替它们补。
05 号演示台把选举按逻辑时钟推进:tick 计数 → 选举超时 → 拉票 → 多数派当选。 它讲清的是事件顺序与当选条件。
动画里的时间是演示时钟,不是时长承诺。这点与官方口径一致:官方没有给出 「故障到新 Leader 就绪」的端到端时长(取证卡 leader-fail-e2e 把它标成「官方未给出」), 作品因此也不写这个数。
→ 打开 05 号演示台 · Raft 选举2026-09-19 13:06,停掉 192.168.3.114 的 TiKV:该 store 转入 Disconnected、Leader 数归零; 同一时刻另两个 store 从各 50 涨到 70 / 72 —— Leader 在没有人工干预的情况下被多数派接走。 重启该 store 后,三个 store 回到 Up(51 / 50 / 41),调度继续向均衡收敛。
| 时刻 | store 1(.112) | store 5(.110) | store 4(.114) |
|---|---|---|---|
| 停机前 | Up · 50 | Up · 50 | Up · 42 |
| 停机中 | Up · 70 | Up · 72 | Disconnected · 0 |
| 重启后 | Up · 51 | Up · 50 | Up · 41 |
03 号演示台把「两个事务改同一行」按两阶段提交的步骤回放:各自读、各自写, 冲突在 TiKV 的 prewrite 阶段被检测出来(取证卡 conflict-stage), 后提交者被拒绝 —— 不会悄悄覆盖。
它讲的是「冲突在哪一层、由谁拒绝」。
→ 打开 03 号演示台 · 分布式事务 2PC13:09 现场(lab.txn_demo):乐观模式下,后提交的事务拿到原生错误
9007(Write conflict 原文完整留在日志里);把它重试一次就成功 ——
值从 1 → 2 → 3,两次加一都生效,一次都没丢。
默认的悲观模式把冲突提前成等锁:后到的事务在 UPDATE 处排队,本次等了 3.006s。
02 号演示台把 PD 的调度过程画出来:Region 分裂后,副本被摆到不同的 store 上。 它讲的是「调度希望副本怎么站」。
副本摆放的合法性来自 PD 的副本策略(取证卡 no-same-store): 同一 Region 的多副本不能落在同一节点。
→ 打开 02 号演示台 · Region 分裂与 PD 调度12:26 现场(PD 只读接口 /regions):抽取 6 个 Region,每个 Region 的 3 个副本 store_id 都是 1 / 4 / 5 的组合 —— 落在三台不同机器上,没有两个副本挤在同一节点; 同一时刻三个 store 的 peer 计数各为 6。
| Region | Leader 在 | 三副本分布(store 号) |
|---|---|---|
| 124 | store 1 | 1 / 5 / 4 |
| 2 | store 4 | 1 / 4 / 5 |
| 128 | store 5 | 1 / 5 / 4 |
| 8 | store 4 | 1 / 5 / 4 |
| 122 | store 1 | 1 / 5 / 4 |
| 126 | store 1 | 1 / 4 / 5 |
dev/probe/region_status.json)store delete,
被 PD 在入口直接拒绝(ErrStoresNotEnough:up stores 不允许降到副本数以下),
观察窗内零扰动;由此同时确认完整的 Offline → Tombstone 状态机在 3 节点集群上
走不进去(需要 ≥ 4 台 TiKV 留出迁入目标),见实测笔记的实测 09。SELECT … FOR UPDATE 的锁范围已补跑(实测 12 / 13);
Offline → Tombstone 完整状态机也在扩到 5 TiKV 后走通(实测 11,两条路;证据 dev/cloud-evidence/)。
TSO 分配开销随后也在同一批云集群上用「本底扣除法」三段实验补上(实测 14;机制级:批合并与时间戳对账,不出性能结论)——
真机上没有「没跑过」的作品断言了;云端条目为一次性快照、不可复跑。dev/probe/r2-round2.txt — 故障转移现场:重灌与重分裂全过程、三个时刻的 store 原始 JSON、
降级期间写入、TiKV 进程自报的运行时配置。dev/probe/r2-txn.txt — 写写冲突实验原文:乐观 9007 报错全文 / 悲观等锁 3.006s / 被拒后重试。dev/probe/r1-offline.txt — 缩容下限保护实跑原文(09-20):下线命令被 PD 入口拒绝的原始报错、
观察窗内的状态与 operators 快照、撤销回执。dev/probe/pd-api-2026-09-19.txt — PD 只读接口原始输出:stores、regions 明细、members。dev/probe/*.json) — 三份 JSON 原样进
Loop 实践的真机回放区,只回放、不改数;同一批数据也支撑
实测笔记的实测卡。