6.2.2 实体组
如图6-7,总体上看,数据拆分成不同的实体组,每个实体组内的操作日志采用基于Paxos的方式同步到多个机房,保证强一致性。实体组之间通过分布式队列的方式保证最终一致性或者两阶段提交协议的方式实现分布式事务。我们先看单个集群的情况,暂时忽略基于Paxos的复制机制。
图 6-7 Megastore实体组
图 6-7 (续)
●单集群实体组内部:同一个实体组内部支持满足ACID特性的事务。数据库系统事务实现时总是会提到REDO日志和UNDO日志,在Megastore系统中通过REDO日志的方式实现事务。同一个实体组的REDO日志都写到这个实体组的根实体中,对应Bigtable系统中的一行,从而保证REDO日志操作的原子性。客户端写完REDO日志后,事务操作成功,接下来的事情只是回放REDO日志。如果回放REDO日志失败,比如某些行所在的子表服务器宕机,事务操作也可成功返回客户端。后续的读操作如果要求读取最新的数据,需要先回放REDO日志。
●单集群实体组之间:实体组之间一般采用分布式队列的方式提供最终一致性,子表服务器上有定时扫描线程,发送跨实体组的操作到目的实体组。如果需要保证多个实体组之间的强一致性,即实现分布式事务,只能通过两阶段提交协议加锁协调。