分布式数据库 30 讲
王磊
光大银行首席数据架构师
29144 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 34 讲
结束语 (1讲)
分布式数据库 30 讲
15
15
1.0x
00:00/00:00
登录|注册

05 | 全局时钟:物理时钟和逻辑时钟你Pick谁?

介于HLC和 TSO 之间
单时间源、多点授时
限制:集群部署范围、性能上限
简便实现
单时间源、单点授时
全球化部署
灵活性
多时间源、多点授时
混合逻辑时钟
优势:高可靠性、高性能、全球化部署
误差控制
多点授时
物理时钟
时间源:GPS和原子钟
单个 vs 多个
物理时钟 vs 混合逻辑时钟
单个 vs 多个
时间在其他分布式系统中的问题
时间对分布式数据库的影响
TrueTime、HLC、TSO、STP的特点
授时机制的区别
全局性时间误差
全局时间协议
STP体系下的角色节点
HLC vs TSO
事件计时逻辑
全球化部署
灵活性
性能优化
时间戳生成机制
单点故障处理
TiDB的全局时钟
STP
TSO
HLC
TrueTime
授时点
时钟类型
时间源
全局时钟的重要性
分布式数据库设计与时间相关
Sandeep S. Kulkarni et al.
Daniel Peng and Frank Dabek
思考题
小结
多层级中心化授时:STP(巨杉)
分布式授时:HLC(CockroachDB)
中心化授时:TSO(TiDB)
常见授时方案
时间的重要性
学习资料
全局时钟:物理时钟和逻辑时钟你Pick谁?
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是王磊,你也可以叫我 Ivan。
今天,我想和你聊聊时间的话题。
“时光一去永不回,往事只能回味”,这种咏叹时光飞逝的歌曲,你一定听过很多。但是,在计算机的世界里,时间真的是一去不回吗?还真不一定。
还记得我在第 2 讲提到的 TrueTime 吗?作为全局时钟的一种实现形式,它是 Google 通过 GPS 和原子钟两种方式混合提供的授时机制,误差可以控制在 7 毫秒以内。正是在这 7 毫秒内,时光是可能倒流的。
为什么我们这么关注时间呢?是穿越剧看多了吗?其实,这是因为分布式数据库的很多设计都和时间有关,更确切地说是和全局时钟有关。比如,我们在第 2 讲提到的线性一致性,它的基础就是全局时钟,还有后面会讲到的多版本并发控制(MVCC)、快照、乐观协议与悲观协议,都和时间有关。

常见授时方案

那既然有这么多分布式数据库,授时机制是不是也很多,很复杂呢?其实,要区分授时机制也很简单,抓住三个要素就可以了。
时间源:单个还是多个
使用的时钟类型:物理时钟还是混合逻辑时钟
授时点:一个还是多个
根据排列组合,一共产生了 8 种可能性,其中 NTP(Network Time Protocol)误差大,也不能保证单调递增,所以就没有单独使用 NTP 的产品;还有一些方案在实践中则是不适用的(N/A)。因此常见的方案主要只有 4 类,我画了张表格,总结了一下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

全局时钟在分布式数据库设计中扮演着关键角色。本文介绍了常见的授时方案和具体实现。文章首先强调了全局时钟的重要性,并列举了常见的授时方案,包括TrueTime、HLC、TSO和STP。TrueTime采用多时间源和物理时钟,具有高可靠性和全球化部署的优势,但也存在时钟偏移和回拨的问题。HLC采用混合逻辑时钟,解决了TrueTime的硬件依赖性,但仍存在整体性时间误差。TSO采用单时间源和单点授时的方式,实现简便但性能有上限。最后,STP采用单时间源和多点授时,介于HLC和TSO之间。文章还详细介绍了TiDB的实现方式,通过Placement Driver节点和etcd实现了高可靠的单点授时服务,并解决了新主产生时间戳大于旧主的问题。总的来说,全局时钟在分布式数据库设计中具有重要意义,不同的授时方案各有优劣,需要根据具体需求进行选择和实现。文章还介绍了HLC和STP的具体实现方式,以及它们在CockroachDB和巨杉中的应用。文章最后提出了思考题,鼓励读者思考时间对分布式数据库的影响,并欢迎读者在评论区留言讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • KayGuoWhu
    全局时钟的目的是,生成全局唯一的时间戳。和全局唯一ID的区别和作用,有什么差异?

    作者回复: 时钟的本质是用于比较事件发生的先后次序,不具有唯一性,但逻辑时钟可以弥补唯一性的问题。而唯一ID只具有唯一性,无法比较次序。

    2021-03-27
    13
  • 朱海昆
    工作中分布式数据库落地的还是相对少。目前项目各种分布式服务,一般都依赖于一个序列号生成器,一般采用雪花或者雪花变种的一些算法实现。为了保证序列号的唯一或者进一步保证递增,依赖于时钟的同步。现在的做法一般都是结合业务场景,对时钟进行一定的校验,同时对于时钟回拨做一些容错等处理解决问题。 目前主流还是用应用层的方案来解决分布式的各种问题,如果将来分布式数据库成熟了,应用解决方案会大大简化。

    作者回复: 说的不错,而且我认为分布式数据库已经进入了规模化商用阶段,应用会逐渐多起来的。

    2020-08-19
    11
  • 扩散性百万咸面包
    老师能不能再多解释一下关于多时间源的意思? 1. 我理解多授时点应该是指当前集群有多个可以获取时间的服务器。TiDB的PD是通过集群化来做到高可用的,那么这为什么还被归于单授时点呢? 2. 多时间源怎么理解?文中提到Spanner是GPS+物理时钟,是说最终的时间计算会通过这2个指标计算的意思吗?如果是单时间源的话,获取的时间只取决于一个因素?

    作者回复: 你好,第一个问题,TiDB的PD虽然是高可靠的,但工作的只是主节点,所以还是单点授时。第二个问题,多时间源,是说多个独立提供时间的实例,比如部分原子钟和GPS坏掉了,其他的原子钟可以照常提供时间不受影响。

    2020-08-22
    2
    9
  • 开心哥
    从牛顿力学进入爱因斯坦的相相对论时空!

    作者回复: 这大概就是学术研究的乐趣,突然发现自己关注的东西,跃升到了更高的维度,哈哈。

    2020-08-19
    8
  • piboye
    hlc判断大小是先 高位,再低位,判断的时候本地时间可以忽略吧?

    作者回复: 你好,还是比较本地时间的,否则就是纯粹的逻辑时钟了,那样无关事件的时钟偏差就太大了。有兴趣的话,也可以研究下课程中的论文,有疑问我们再一起讨论。

    2020-08-23
    5
  • Lukia
    “103 到 106 的“可分配时间窗口”,在这个时间窗口内 PD 可以使用系统的物理时间作为高位,拼接自己在内存中累加的逻辑时间,对外分配时间戳。 ” 如果主PD在104发生了故障,切换新主PD之后岂不是105和106的时间窗口都不可用了?

    作者回复: 是的,已经分配的时间窗口就舍弃了,这样保证不会时间戳不会重叠

    2020-09-17
    3
  • 真名不叫黄金
    感谢老师分享~ 顺便说下我对Spanner的理解: Spanner解决True Time回拨的问题,应该是使用等待~ True Time会返回一个时间区间,保证真实时间是在这个区间内的,那么Spanner会等待这个时间过去,以此保证时钟不会回拨

    作者回复: 说的对,点赞。我在第12讲会详细谈这个问题。

    2020-08-21
    2
  • 游弋云端
    期待老师后续的时钟应用场景恩讲解!

    作者回复: 嗯,这个还是蛮重要的

    2020-08-20
  • myrfy
    时间决定了数据库系统看到的事件发生顺序。对于对同一条记录进行操作的oplog在不同节点之间复制,然后在不同节点apply的时候,决定了谁在谁之前操作

    作者回复: 这个理解有点小问题,复制的顺序并不影响操作的顺序和数据的可见性,还是要看操作的全局时间。推荐关注一下第12讲

    2020-08-19
  • wy
    单体数据库时代,我们一般都会忽略时间问题,因为即使时间是错的,但是起码它是递增的。但是在分布式数据库中,多个分片可能分布在不同的机房里面,这些机房甚至可能在不同的国家,可能会出现时间倒退的现象,对于分布式数据库的数据一致性的实现来说是影响很大的
    2021-01-06
    5
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部