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

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

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

常见授时方案

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

全部留言(19)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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