FoundationDB 内核:Unbundled · OCC · TLog · Redwood · Simulation
分布式 KV 对比 已经回答「什么时候选 FoundationDB」;确定性模拟测试 解释了控制非确定性源的方法论;TiKV / HTAP 内核 则把 Multi-Raft 与 Percolator 快照隔离走通。中间仍缺一层:一次 FoundationDB 事务如何经 Proxy、Sequencer、Resolver、TLog 提交,Storage Server 为什么异步应用仍能提供版本化读取,5 秒限制如何约束冲突窗口与恢复。
本系列以 FoundationDB 7.x 为主线,写:
- Client API、冲突范围与自动重试。
- Coordinator、Grv/Commit Proxy、Sequencer、Resolver 的职责。
- OCC 严格可串行化与事务时间上限。
- TLog 提交点、Storage Server 异步应用与 shard。
- SSD Engine / Redwood B-Tree。
- 故障恢复、确定性模拟、Record Layer、运维、排障与选型。
系列状态:已完成(2026-07-17)。 全 18 篇已发布。规划见 PLAN.md。
版本锚定:FoundationDB 7.x 官方文档、源码与 SIGMOD 2021 系统论文。实验只使用实际运行过的单机 / Docker 环境;不伪造官方 benchmark 之外的性能数字。
适合谁看
- 分布式数据库、元数据服务与存储平台工程师。
- 读完
distributed/39,想从产品名下沉到提交和恢复路径的读者。 - 从 TiKV / Percolator 过来,希望理解 OCC 严格可串行化的读者。
- 想把确定性模拟映射到真实角色恢复路径的工程师。
在知识栈中的位置
| 层 | 站内内容 | 本系列关系 |
|---|---|---|
| KV 选型 | distributed/39 | 第 1、18 篇回链,不复述性能表 |
| 确定性模拟方法 | distributed/54 | 第 14 篇钉 FDB 工程落点 |
| SI / Multi-Raft | tikv-htap | 第 8–9、18 篇对照 |
| 单机存储 | rocksdb、SQLite 单篇 | 第 12 篇 B-Tree / LSM 边界 |
| FoundationDB 内核 | 本系列 | Unbundled 角色 → 事务 → 恢复 / Layer |
一、这个领域最值得关注的 5 个问题
- Unbundled 角色如何分工,一次写事务穿过哪几跳? → 第 1–7 篇。
- Sequencer + Resolver 如何兑现严格可串行化与 5 秒事务上限? → 第 6、8–9 篇。
- TLog 与 Storage Server 如何解耦提交延迟和读路径? → 第 10–12 篇。
- 确定性模拟如何把网络、磁盘、时钟变成可重放故障? → 第 13–14 篇。
- 何时选 FDB 而非 TiKV / etcd?Layer 边界在哪? → 第 15–18 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
A["01 Unbundled overview"] --> B["02 Client transaction API"]
A --> C["03 Coordinator"]
A --> D["04 Proxy"]
C --> E["05 Role topology"]
D --> E
E --> F["06 Sequencer"]
F --> G["07 Write pipeline"]
B --> H["08 Resolver OCC"]
G --> H
H --> I["09 Strict serializability"]
G --> J["10 TLog"]
J --> K["11 Storage Server"]
K --> L["12 Redwood"]
C --> M["13 Recovery"]
M --> N["14 Deterministic simulation"]
B --> O["15 Record Layer"]
K --> P["16 Operations"]
I --> Q["17 Troubleshooting"]
P --> Q
O --> R["18 Selection"]
N --> R
Q --> R
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 5 → 6 → 7 → 8 → 9 → 10 → 18 | 快速建立坐标系 |
| 事务正确性 | 2 → 6 → 8 → 9 → 17 | OCC / 一致性读者 |
| 存储与恢复 | 3 → 10 → 11 → 12 → 13 → 16 | 存储平台 / 运维 |
| 测试方法 | 1 → 13 → 14 → 17 | distributed/54 读者 |
| Layer 与选型 | 2 → 15 → 18 | 元数据与应用平台 |
| 完整通读 | 1 → … → 18 | 系统掌握 |
三、目录与每篇价值点
第一部分:全景与角色
- Unbundled
全景:事务、日志与存储为何拆开
- SIGMOD 2021 架构锚点;与 distributed/39、tikv-htap 分工。
- Client
API 与事务模型
- 冲突范围、自动重试与 5 秒窗口预告。
- Coordinator
与集群配置
- 配置持久化、恢复入口与角色招募。
- Proxy:读版本与提交入口
- Grv / Commit Proxy 分工与批处理。
- 角色拓扑与数据流
- 一张图串联读写路径与扩展边界。
- Sequencer:全局版本与恢复
- read / commit version 分配;纠正「逻辑单点等于无高可用」。
第二部分:事务与严格可串行化
- 写事务流水线
- Client → Proxy → Sequencer → Resolver → TLog。
- Resolver 与
OCC
- read/write conflict range;与 Percolator SI 对照。
- 严格可串行化与
5 秒限制
- 实时顺序、冲突窗口与恢复有界性。
第三部分:日志与存储
- Transaction
Log:提交点与持久化
- 多数副本 durable 后提交;与 Storage 异步 apply 解耦。
- Storage
Server:Shard、版本与读路径
- 拉日志、版本读取与 shard 迁移。
- SSD
Engine 与 Redwood
- SQLite 派生到版本化 B-Tree;与 RocksDB LSM 分工。
第四部分:恢复、模拟与 Layer
- 故障恢复:角色招募与恢复
epoch
- 写暂停、读边界与旧角色隔离。
- 确定性模拟:FDB
的工程落点
- 网络/磁盘/时钟接口替换;与 distributed/54 分工。
- Record
Layer:记录与二级索引
- Protocol Buffers、Tuple/Subspace 与索引原子维护。
- 运维与容量:角色资源画像
- 分片热点、备份和灾备边界;不写无来源容量公式。
第五部分:排障与选型
- 生产排障:超时、冲突、切换、落后
- 症状 → 机制决策树。
- 选型与阅读地图
- FoundationDB vs TiKV vs etcd;开放问题与系列收束。
四、与相邻系列的分工
| 话题 | 本系列 | 相邻内容 |
|---|---|---|
| 三类 KV 横向选型 | 第 18 篇回链 | distributed/39 |
| 确定性模拟方法论 | 第 14 篇 FDB 工程映射 | distributed/54 |
| Multi-Raft / Percolator | 第 8–9 篇只作事务对照 | tikv-htap |
| LSM 存储 | 第 12 篇对照 | rocksdb |
| SQLite 内核 | 第 12 篇只讲 SSD Engine 历史 | SQLite 单篇 |
参考
返回 数据库索引 · distributed/39 · tikv-htap
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【FoundationDB 内核】Unbundled 全景:事务、日志与存储为何拆开
以 SIGMOD 2021 为锚点,厘清 FoundationDB 控制面与数据面角色分工,说明一次事务穿过 Proxy、Sequencer、Resolver、TLog、Storage 的路径,并与站内 distributed/39、tikv-htap 划清边界。
【FoundationDB 内核】写事务流水线:Client → Commit Proxy → Sequencer → Resolver → TLog
钉住 FoundationDB 一次写事务的提交路径:Client 经 Commit Proxy 取 commit version、Resolver 做 OCC、TLog 多数持久化后才向客户端返回成功;并划清「提交成功」与「Storage Server 可读」之间的边界。
【FoundationDB 内核】Sequencer:read/commit version、逻辑单点与恢复
说明 Sequencer 如何分配 read version 与 commit version、为何是逻辑单点而非无高可用,以及世代恢复如何与版本推进衔接。
【FoundationDB 内核】Resolver 与 OCC:冲突范围、窗口与自动重试
拆解 FoundationDB Resolver 如何用 read/write conflict ranges 做乐观并发控制:冲突窗口落在 read version 与 commit version 之间,客户端自动重试;并与 TiKV Percolator 快照隔离对照机制差异,不写无实测性能结论。