Spanner的TrueTime与分布式事务

2022-06-02 00:00:00 数据 事务 时间 读取 提交

Spanner的TrueTime与分布式事务

Spanner是谷歌的分布式数据库,发表于论文Spanner: Google’s Globally-Distributed Database,它创造性的采用了GPS + 原子钟的方式提供TrueTime API来解决时钟问题,去掉了中心化的授时中心。本文将尝试解释Spanner如何利用TrueTime API来解决分布式事务,并提供外部一致性。

前置知识:

  • 理解linearizability的概念,可参考维基百科.
  • 事务以及分布式事务2PC,可参考《数据库系统实现》或《数据库系统概念》相关章节.
  • 共识算法paxos或raft的基本概念,可参考对应论文。(谷歌论文中使用的一种multi paxos实现,但是并未公开具体细节,对于本文中的内容只需要有基本的共识算法概念即可理解).

什么是TrueTime API

由于在分布式系统中,各个节点的时钟不可避免的存在误差,因此多数系统会采用一个中心节点来进行授时(例如tidb的pd),但是对于谷歌这样让数据全球分布的需求而言,使用中心化节点从延时和性能上代价太大,因此谷歌开发了TrueTime API。对于本文而言只要知道其接口的代表意义即可,它提供了下面三个接口。

MethodReturn
TT.now()返回一个范围区间[earliest,latest], 当前的真实时间位于这个区间中
TT.after(t)如果确保当前真实时间已经超过t,则返回true
TT.before(t)如果确保当前真实时间还未到t,则返回true

相关文章