高层组织架构
数据切分成多个paxos group来进行backup,这样做的目的可以提高并行行。paxos和raft采用的majority多数原则可以对抗容错,和一些高延迟机器。
挑战
1)读要读到最新写入的值 2)跨越切片的事务 3)事务必须是可串行化的
读写事务
利用上节课的2pl和2pc策略
只读事务
只在本地备份上读取,这就保障了一致性,同时也无需上锁,和二阶段提交,这使得只读事务处理起来fast
正确性
在可串行化(没有时间要求)上更加严格的external consistency (if T1 < T2 T2 要看到T1的全部写入)
怎么实现正确性
通过加时间戳,然后根据时间戳的顺序,然后每个backup的数据上也有时间戳
读事件要等待时间看看是否有要准备好,将提交的事务,和将要开始写入的事务
时间偏大的话,等待时间长点,不影响正确性
时间偏小的话,可能读到的不是最新写入的,正确性受到影响,违反了external consistency
时钟设计
实现这些属性的关键是一个新的TrueTime API及其实现。该API直接暴露了时钟不确定度,且对Spanner的时间戳的保证基于该API的实现提供的界限内。如果不确定度较大,Spanner会减速以等待该不确定度。Google的集群管理软件提供了TureTime API的一种实现。该实现通过使用多种现代参考时钟(GPS和原子时钟)来让不确定度保持较小(通常小于10ms)。
正常情况下时钟难免有误差,TrueTime在底层使用的参考时间为GPS和原子时钟。但还是有误差。所以用(最早,最晚)这样的区间来进行记录 commit和start的时间戳从最晚开始(等待时间长点,不影响正确性)commit wait delay C 到 read now.最早时刻。