Skip to content

Commit eb9d325

Browse files
committed
wip: FoundationDB
1 parent c7cc43b commit eb9d325

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

paper reading/dbms/FoundationDB.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## FoundationDB
2+
3+
参考:
4+
5+
1. FoundationDB: A Distributed Unbundled Transactional Key Value Store
6+
2. FoundationDB Record Layer: A Multi-Tenant Structured Datastore
7+
3. https://apple.github.io/foundationdb/index.html
8+
9+
FoundationDB是苹果内部使用的分布式数据库,主要特性包括:
10+
11+
- 多模:可以存储各种格式类型的数据
12+
- 易扩展:部署、管理、扩容方便
13+
- 高性能:商业化的产品级硬件即可支持高负载
14+
- 弹性应用架构:应用即可以DB直接交互,也可以与上层的无状态层进行交互(提供更多特性)
15+
16+
FDB本质是一个分布式、有序的KV存储,并在此之上提供了基于乐观并发控制的事务特性(NoSQL的扩展性 + ACID -> NewSQL)。系统逻辑上由两个集群组成(两层均可独立地扩展):
17+
18+
- 数据层(Data Plane): 负责存储数据、处理事务
19+
- 控制层(Control Plane): 作为集群的协调者,包含了元数据管理、集群监控、与事务号分配等工作
20+
21+
> FDB 的模拟测试框架是它的特别之处,可以做到在单线程的条件下 快速模拟集群的各种故障,所以能保证系统是确定性的(deterministic),也就是所有问题都是可复现的(在同样输入的情况下);从而保证了在快速发布新版本、引入新特性时,系统仍能保持稳定。
22+
23+
一个产品化的数据库需要考虑什么问题?
24+
25+
- 数据持久性
26+
- 数据分片
27+
- 负载均衡
28+
- 集群管理
29+
- 宕机检测与恢复
30+
- 副本分布
31+
- 集群同步
32+
- 过载状态下的运行
33+
- 横向扩展
34+
- 并发与任务调度
35+
- 系统部署与升级、配置管理
36+
37+
为了从更高层次来阐述这些问题的解决方案,得先了解FDB架构的设计理念:
38+
39+
- Divide-and-Conquer: 将 事务管理(写入路径) 与 分布式存储(读取路径)分离开来,并且二者可以单独扩展,还有其他不同的组件负责不同的任务,如时间戳管理、冲突检测、日志记录等
40+
- Make failure a common case: **在分布式系统中,故障认为是常态而不是一个小概率的异常**。在FDB的事务管理中,并不是尝试解决所有的失败场景,而是主动地进行重启恢复
41+
- Fail fast and recover fast: 为了提升可用性,FDB尽可能地降低MTTR(平均恢复时间),也就是上一点所提到的重启恢复【论文中提到,生产环境下的恢复用时少于5s】
42+
- Simulation testing: 引入了随机化、确定性的测试框架,不仅更容易发现深层次的bug,也能改进代码质量和开发效率
43+
44+
------
45+
46+
### 事务
47+
48+
MVCC读 + 乐观并发写,可序列化的事务
49+
50+
51+
52+
-----------
53+
54+
[未解决的一些问题](https://apple.github.io/foundationdb/known-limitations.html)
55+
56+
- 大事务:
57+
- 长事务:目前不支持执行时间超过5s的长事务,如果需要长事务,建议在应用层进行乐观验证;如果需要长读事务,建议在上层维护快照版本;
58+
-

0 commit comments

Comments
 (0)