你好,我是王磊,你也可以叫我 Ivan。
今天,我想和你聊聊时间的话题。
“时光一去永不回,往事只能回味”,这种咏叹时光飞逝的歌曲,你一定听过很多。但是,在计算机的世界里,时间真的是一去不回吗?还真不一定。
还记得我在第 2 讲提到的 TrueTime 吗?作为全局时钟的一种实现形式,它是 Google 通过 GPS 和原子钟两种方式混合提供的授时机制,误差可以控制在 7 毫秒以内。正是在这 7 毫秒内,时光是可能倒流的。 为什么我们这么关注时间呢?是穿越剧看多了吗?其实,这是因为分布式数据库的很多设计都和时间有关,更确切地说是和全局时钟有关。比如,我们在第 2 讲提到的线性一致性,它的基础就是全局时钟,还有后面会讲到的多版本并发控制(MVCC)、快照、乐观协议与悲观协议,都和时间有关。
常见授时方案
那既然有这么多分布式数据库,授时机制是不是也很多,很复杂呢?其实,要区分授时机制也很简单,抓住三个要素就可以了。
根据排列组合,一共产生了 8 种可能性,其中 NTP(Network Time Protocol)误差大,也不能保证单调递增,所以就没有单独使用 NTP 的产品;还有一些方案在实践中则是不适用的(N/A)。因此常见的方案主要只有 4 类,我画了张表格,总结了一下。