知识卡片
CommitWait消化误差
内容
Spanner 选择大于 TT.now().latest 的提交时间戳,再等待 TT.after(s) 为真后才提交,使时间戳位于事务真实开始和结束之间。发散:等待不是浪费,而是把物理时钟误差转成可证明的顺序边界。
参考来源
- 位置:《分布式系统与一致性》第8章《Google的Spanner数据库》"8.4.2"commit wait一节(源文件:_epub-src/OEBPS/Text/chapter12.xhtml)
- 结论依据:原文明确commit timestamp的生成条件"调用一次TT.now(),要满足s>TT.now().latest",随后"确认s已经成为过去时间,即如果TT.after(s)==false则等待,一直等到TT.after(s)==true后……这个等待的行为被称为commit wait",并说明这段等待与Paxos协议执行时间重叠,不是空等待。
- 原始内容:coordinator leader生成一个时间戳(称为s)作为commit timestamp。s必须满足下面的条件……调用一次TT.now(),要满足s>TT.now().latest……确认s已经成为过去时间,即如果TT.after(s)==false则等待,一直等到TT.after(s)==true后……这个等待的行为被称为commit wait。