Spanner Distributed Database 阅读
Introduction Spanner 数据库中的数据是分片(Shard)分散存储在多个数据中心的,数据是用 Paxos 算法(状态机)保证一致性。如果数据中心发生变化,Spanner 自动做 reshard。 Spanner 中的数据是存储在 schematized semi-relational table 上的。 在 commit 的时候把 timestamp 作为数据的 version。老版本的数据可以被垃圾回收,client 也可以读老数据。 Spanner 有两个特性是一般的分布式系统非常难实现的, 读和写操作的外部一致性。 在一个时间戳下,读操作是全局一致的。 能实现以上两点,是因为 Spanner 可以分配全球范围内保持一致的 commit timestamp。Spanner 的 timestamp 靠 TrueTime API 实现,甚至可以用 GPS 和原子钟来提高 TrueTime API 的精度。 Implementation 一个 Spanner 集群被称为一个 universe,如下图所示 Spanner 被组织成许多个 zone 的集合,zone 是管理部署的基本单元。一个数据中心可能会有多个 zone,zone 也是物理隔离的单元,例如,两个不同应用的数据就会被分散在两个 zone 上。 Zonemaster 把数据分配给 spanserver,spanserver 是真正存数据的地方 Client 从 location proxy 定位数据在哪个 spanserver 上 Universe master 主要是一个管理界面 Placement driver 周期性的与 spanserver 交互,进行负载均衡 Spanserver Software Stack 每一台 spanserver 上会存 100 到 1000 张表,每一张表上都有一个 Paxos 状态机,每一个 Paxos 状态机都会把自己的 metadata 和 log 存在 tablet 上。 ...