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

15 | 分布式事务串讲:重难点回顾+思考题答疑+知识全景图

Spanner论文中的优化方式
使用Paxos Commit协议
Paxos Commit协议融合了Paxos算法的原子提交协议,解决网络故障问题
Paxos是对单值或状态达成共识的过程,而2PC是对多个数据项或状态达成一致的过程
2PC主要靠数据库实现,存在同步阻塞、单点故障和数据不一致问题
TCC由应用系统负责实现,更灵活但对业务侵入性更高
MVCC与乐观协议、悲观协议的关系
CockroachDB的全局锁表实现悲观协议
S2PL和 Percolator模型
并发控制技术体系
推测 CockroachDB向悲观协议转换的方式
TiDB和 CockroachDB的乐观协议
并发控制分为乐观协议和悲观协议
无需“等待”达到线性一致性或因果一致性的情况
Spanner和 CockroachDB的时间误差处理方式
时间误差的控制手段:写等待和读等待
影响读写冲突处理的时间误差
TiDB和 CockroachDB的读写冲突处理方案
PGXC风格分布式数据库的读写冲突处理方案
MVCC和快照技术
CockroachDB的优化方法
2PC的低延迟技术:缓存提交写、管道和并行提交
2PC和Paxos协议的关系
改进型协议:Percolator模型和“一阶段提交”协议
两种原子性协议:TCC和2PC
第14讲:悲观协议
第13讲:广义乐观和狭义乐观
第12讲:读写操作与时间误差
第11讲:读写冲突、MVCC与快照
第10讲:2PC的延迟优化
第9讲:原子性提交协议
分布式事务串讲

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

你好,我是王磊,你也可以叫我 Ivan。
今天这一讲是我们这门课的第二个答疑篇,我会带你回顾第 9 讲到第 14 讲的主要内容,集中解答留给你的思考题,同时回复一些留言区的热点问题。这几讲涉及的也是数据库的核心话题“事务”,咱们一定得学扎实了。

第 9 讲:原子性提交协议

第 9 讲,我们首先讨论了两种不同的原子性协议,分别是面向应用层的协议 TCC 和面向资源层的协议 2PC。
使用 TCC 协议时,由应用系统负责协议的实现,数据库没有额外工作。所以,TCC 更加灵活,但对业务的侵入性更高。反之,使用 2PC 协议时,主要靠数据库来实现,应用层工作很少,所以业务侵入少,但是存在同步阻塞、单点故障和数据不一致这三个问题。
针对 2PC 协议的这些问题,我又介绍了两种改进型协议。一种是 Percolator 模型,在 TiDB 和 CockroachDB 中有具体落地。另一种是 GoldenDB 中实现的“一阶段提交”协议。它们都较好地解决了单点故障和数据不一致的问题。而有关同步阻塞带来的高延迟问题,我们没有展开,而是留到了第 10 讲
这一讲的是思考题是:2PC 第一阶段“准备阶段”也被称为“投票阶段”,和 Paxos 协议处理阶段的命名相近,你觉得 2PC 和 Paxos 协议有没有关系,如果有又是什么关系呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式事务的核心概念和相关优化技术,涵盖了原子性提交协议、Paxos Commit协议、2PC的延迟优化技术等内容。作者在第9到第14讲中重点讨论了TCC和2PC两种原子性协议,以及针对2PC协议的改进型协议,以及分析了2PC的延迟优化技术和读写冲突的解决方案。此外,还探讨了乐观协议和悲观协议的并发控制技术,以及MVCC与乐观协议、悲观协议的关系。整体而言,本文对于想要深入了解分布式系统的读者具有一定的参考价值。文章内容涵盖了分布式事务的重要概念和技术特点,尤其关注了分布式数据库在原子性和隔离性方面的挑战和突破,以及NewSQL风格分布式数据库在2PC的优化方面取得的进展。对于对分布式数据库的事务处理感兴趣的读者来说,本文提供了深入了解分布式事务的良好起点。

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

全部留言(7)

  • 最新
  • 精选
  • 扩散性百万咸面包
    老师还想问一下:关于TiDB 4.0 既然换成了悲观事务,那么引入了获取悲观锁的成本。在新的悲观设计下,写操作还是跟原来一样,是被缓存在TiDB节点,然后在commit的时候再真正写入吗?也就是说,换成悲观事务,只是为了提前获取悲观锁,保证事务提交一定成功,而并不是像传统悲观事务,遇到写操作就立刻转成KV写入?

    作者回复: 第一个问题,TiDB的悲观锁就是在原有乐观锁上做加法,详细内容建议复习课程内容再理解下。 第二个问题没有完全理解:(,但可以说明的是,写操作缓存和悲观协议没有必然的关系。

    2020-09-15
  • 扩散性百万咸面包
    这里我问老师个问题: 对于2PC的优化,老师说有TiDB的buffer write,CRDB的Pipeline和并行事务。但是我觉得这buffer write和pipeline并不是对2PC的优化,这是对于事务中的写操作的优化。事务中的写操作触发的是共识协议如Raft等用来同步对于这一数据项的状态,因此对它的优化降低了N轮共识算法。但这和2PC不是一个概念,2PC是事务提交的时候达成原子性的机制。老师,这样理解对吗?

    作者回复: 嗯,关于你提到的“buffer write和pipeline并不是对2PC的优化,这是对于事务中的写操作的优化”,我觉得这样解释不太恰当,因为写操作本身也是2PC的一部分。一个过程总是可以划分成若干片段,如果和片段有关就和过程无关,那似乎就没有和整个过程有关的的东西了,是吧?:) 或者你可以倒过来看这个问题,分布式数据库下有与分布式事务完全无关的写操作吗?似乎没有,就算是那些只涉及一个分片的事务,处理上也是和单机事务有差异的。

    2020-09-15
  • Jowin
    老师这张图太赞了,基本看明白了,把前几章能完全串来了。
    2021-03-05
    2
  • 槑·先生
    TiDB得隔离级别到底属于什么呢
    2022-10-13归属地:湖北
  • 吴小智
    看不懂了...
    2021-07-27
  • 大汉_客家族_数据工程_曾院士
    很遗憾后面的2pc ssi 等概念很难消化
    2021-05-08
  • 趁早
    如果学完一个章节有一个测试掌握程度的就更好了
    2020-09-11
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部