Real vs Sim · 对账页 · 演示台讲机制,真机给读数

真机 vs 模拟
同一件事,两边各放一遍,逐条对账

这个作品同时在两个世界里讲同一套机制:一个是可反复播放的确定性演示台(讲「机制是什么」), 一个是 2026-09-19 那天在真机上做的一次性现场(给「读数是多少」)。 这一页把同一件事在两边各放一遍 —— 逐条对账。

对账规则只有一条:能对上的写下「对上了」,对不上的如实写明边界。 模拟不承诺时长与性能,真机也不承诺覆盖全部场景 —— 两边各自缺什么,这一页都不替它们补。

三台真机 · 192.168.3.110 / 112 / 114 v8.5.7 · 2026-09-19 现场 三条机制 · 逐条对账 读数可点回原始日志

三条机制 · 逐条对账

每张卡两半:模拟一侧、真机一侧,结论在最下面
机制 01跨节点选主 一台 TiKV 消失之后,谁接着当 Leader ✅ 对上了
SIM · 演示台

05 号演示台把选举按逻辑时钟推进:tick 计数 → 选举超时 → 拉票 → 多数派当选。 它讲清的是事件顺序与当选条件。

动画里的时间是演示时钟,不是时长承诺。这点与官方口径一致:官方没有给出 「故障到新 Leader 就绪」的端到端时长(取证卡 leader-fail-e2e 把它标成「官方未给出」), 作品因此也不写这个数。

→ 打开 05 号演示台 · Raft 选举
REAL · 真机现场

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 · 50Up · 50Up · 42
停机中Up · 70Up · 72Disconnected · 0
重启后Up · 51Up · 50Up · 41
出处 dev/probe/r2-round2.txt(§R2-3 停机前 / §R2-4 停机中与重启后) · 完整实测卡见实测笔记 · 实测 03
对账结论 对上了。两边指向同一件事:Leader 由多数派重新选出、服务不中断。 差别在口径边界 —— 模拟不承诺时长,真机也只记录事件顺序:因为「端到端时长」这个数,官方未给出(取证卡 leader-fail-e2e)。
机制 022PC 写写冲突 两个事务改同一行,会发生什么 ✅ 对上了 · 互补
SIM · 演示台

03 号演示台把「两个事务改同一行」按两阶段提交的步骤回放:各自读、各自写, 冲突在 TiKV 的 prewrite 阶段被检测出来(取证卡 conflict-stage), 后提交者被拒绝 —— 不会悄悄覆盖。

它讲的是「冲突在哪一层、由谁拒绝」。

→ 打开 03 号演示台 · 分布式事务 2PC
REAL · 真机现场

13:09 现场(lab.txn_demo):乐观模式下,后提交的事务拿到原生错误 9007(Write conflict 原文完整留在日志里);把它重试一次就成功 —— 值从 1 → 2 → 3,两次加一都生效,一次都没丢。

默认的悲观模式把冲突提前成等锁:后到的事务在 UPDATE 处排队,本次等了 3.006s。

出处 dev/probe/r2-txn.txt(三个实验原文) · 完整实测卡见实测笔记 · 实测 08
对账结论 对上了,而且互补。模拟讲清「冲突在 prewrite 被谁拒绝」,真机补上「被拒之后数据怎么样」—— 被拒绝的是事务,不是数据。另有一条两边都没有「自动挡」:自动重试这个能力, 官方口径自 v8.0.0 起已不再支持(取证卡 txn-auto-retry);真机上的重试,是我们重新提交的一次。
机制 03Region 多副本落位 同一个 Region 的三个副本,站在哪里 ✅ 对上了
SIM · 演示台

02 号演示台把 PD 的调度过程画出来:Region 分裂后,副本被摆到不同的 store 上。 它讲的是「调度希望副本怎么站」。

副本摆放的合法性来自 PD 的副本策略(取证卡 no-same-store): 同一 Region 的多副本不能落在同一节点。

→ 打开 02 号演示台 · Region 分裂与 PD 调度
REAL · 真机现场

12:26 现场(PD 只读接口 /regions):抽取 6 个 Region,每个 Region 的 3 个副本 store_id 都是 1 / 4 / 5 的组合 —— 落在三台不同机器上,没有两个副本挤在同一节点; 同一时刻三个 store 的 peer 计数各为 6。

RegionLeader 在三副本分布(store 号)
124store 11 / 5 / 4
2store 41 / 4 / 5
128store 51 / 5 / 4
8store 41 / 5 / 4
122store 11 / 5 / 4
126store 11 / 4 / 5
出处 dev/probe/pd-api-2026-09-19.txt(/regions 原始输出) · 转写稿已进Loop 实践的真机回放(dev/probe/region_status.json)
对账结论 对上了。模拟说「副本会被调度到不同节点」,真机给证据:多副本确实分散在三台机器上。 一个时间注记:采样时集群刚回到 6 个 Region(12:26),此后发生了再分裂与故障转移实验 —— 引用时记住这是那一刻的现场,数字随集群状态演进。

对账的边界

没覆盖的部分,单独说清楚

本页尚未覆盖(真机一侧)

模拟一侧不承诺什么

原始材料

每个读数的出处,按文件点回
本页不产生新结论:每个读数都能点回原始日志,每个机制都能点开取证卡。 相关页面:Loop 实践(真机回放) · 实测笔记(完整实测卡) · 在线核验台(当场复跑守卫) · 核验实录(守卫清单) · 返回首页