7.3.3 复制与一致性
如图7-8所示,每个数据中心运行着一套Colossus,每个机器有100~1000个子表,每个子表会在多个数据中心部署多个副本。为了同步系统中的操作日志,每个子表上会运行一个Paxos状态机。Paxos协议会选出一个副本作为主副本,这个主副本的寿命默认是10秒。正常情况下,这个主副本会在快要到期的时候将自己再次选为主副本;如果出现异常,例如主副本所在的spanserver宕机,其他副本会在10秒后通过Paxos协议选举为新的主副本。
图 7-8 Spanner多集群复制
通过Paxos协议,实现了跨数据中心的多个副本之间的一致性。另外,每个主副本所在的Spanserver还会实现一个锁表用于并发控制,读写事务操作某个子表上的目录时需要通过锁表避免多个事务之间互相干扰。
除了锁表,每个主副本上还有一个事务管理器。如果事务在一个Paxos组里面,可以绕过事务管理器。但是一旦事务跨多个Paxos组,就需要事务管理器来协调。
锁表实现单个Paxos组内的单机事务,事务管理器实现跨多个Paxos组的分布式事务。为了实现分布式事务,需要实现3.7.1节中提到的两阶段提交协议。有一个Paxos组的主副本会成为两阶段提交协议中的协调者,其他Paxos组的主副本为参与者。