作者:张沟狂人
链接:https://www.zhihu.com/question/312293421/answer/2294311618
paxos write发生的时机是这个一个事务执行完所有read和write操作,进入commit流程之后,因为Spanner中,在事务提交之前,所有的写操作都是缓存在client,称之为client write。当进入提交流程之后,会把所有client真正写入底层存储,这个过程需要完成paxos共识,称做为paxos write。
链接:https://www.zhihu.com/question/312293421/answer/2294311618
across leaders里的leaders指的是这个paxos组的不同任期的leader,它们的lease interval也不会发生重叠,其实把这句话连起来看就通顺了:
within each Paxos group, Spanner assigns timestamps to Paxos writes in monotonically increasing order, even across leaders.
在一个paxos组中,Spanner给在这个paxos中发生的写操作(paxos write)分配的时间戳保持单调递增,即使这个paxos组发生leader切换。
主要原因是由于各个机器的时钟偏移,在发生leader切换后,前一个leader和新leader的lease interval可能会重叠,就像下面这样:
在发生重叠之后,存在的问题就是,在某个时间段,一个paxos组中存在两个leader,比如上面的[t1, t2],这就已经违反了paxos协议。
所以spanner让每个leader都维护已经分配过的大的时间戳 ,在发生leader迁移时,原leader通过wait,让TT.now.earliest > ,这样在新的leader上分配的时间戳就算在极端的时钟偏移也不会和上一个leader的lease interval发生重叠: