Spanner 论文阅读笔记

Spanner: Google’s globally-distributed database 论文阅读笔记

重点就是如何用 TrueTime 做 MVCC

介绍

  • 分布式多版本数据库:(key, timestamp) -> row
  • 外部一致性:第一个事务提交后,第二个事务开始,那么第二个事务提交时间戳一定大于第一个事务提交时间戳

实现

在这里插入图片描述

  • placement driver:定期与 span server 通信,判断数据是否应该移动,做负载均衡
    • 移动单位是 directory,也就是 key-range
  • universe:一个 spanner 的部署,用来监控整体状态
  • zone:span server 的集合
    • 一个 zone master:负责把数据分配给 span server
    • location proxy:帮助 client 定位 span server
    • 成百上千个 span server:处理 client 请求
      • 每个 span server 包含 100-1000 个 tablet

在这里插入图片描述

为了支持多副本,每个 span server 都在 tablet 上实现了 single paxos 状态机。图中的 lock table 用来做并发控制,记录了 key range 对应锁的状态。
如果一个事物只涉及到一个 paxos group,那么直接组内做即可。否则需要用 txn manager 来实现 participant leader:如果事务涉及到多个组,那么这些组的 leader 们会协调完成二阶段提交。其中的一个组会被选为 coordinator:这个组的 participant leader 会被当作 coordinator leader,这个组剩下 slave 们则被称为 coordinator slave。每个 txn manager 的状态会被保存到 paxos 组。

数据模型

在这里插入图片描述

什么叫 rows must have names

TrueTime

在这里插入图片描述

TrueTime 保证了任何 server 的时间戳差距是有上限的,只要等待超过这个上限,就可以保证之后的任何时间戳都比之前的大。

MVCC

在这里插入图片描述

  • start:为一个写事务 (Paxos写操作) 分配时间戳 s >= TT.now().latest
  • commit wait:commit绝对时间 要确保比 commit时间戳(s) 大,即等待到 TT.after(s) 为真,然后开始 2PC 的第二阶段

事务开始(t1, ε),事务结束(t2, ε)
保证 t1+ε < t2-ε 即可

外部一致性Proof:

在这里插入图片描述

2PC 准备阶段中,每个 server 给 coordinator leader 发送时间戳,coordinator 选择一个提交时间戳,必须比所有时间戳都晚。然后 commit wait 直到过了这个提交时间戳,于是之后发起的事务的开始时间,都不会比这个事务的结束时间早了。然后 coordinator 将提交时间戳发送给 client 还有其他的 server,server commit,释放锁。

在这里插入图片描述

Ref[1] 演讲第17min

在这里插入图片描述

图片来自 https://zhuanlan.zhihu.com/p/20868175

Reference

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值