分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
3587 人已学习
课程目录
已更新 4 讲 / 共 22 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (3讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
分布式协议与算法实战
登录|注册

03 | ACID理论:CAP的酸,追求一致性

韩健 2020-02-17
你好,我是韩健。
提到 ACID,我想你并不陌生,很多同学也会觉得它容易理解,在单机上实现 ACID 也不难,比如可以通过锁、时间序列等机制保障操作的顺序执行,让系统实现 ACID 特性。但是,一说要实现分布式系统的 ACID 特性,很多同学就犯难了。那么问题来了,为什么分布式系统的 ACID 特性在实现上,比较难掌握呢?
在我看来,ACID 理论是对事务特性的抽象和总结,方便我们实现事务。你可以理解成:如果实现了操作的 ACID 特性,那么就实现了事务。而大多数人觉得比较难,是因为分布式系统涉及多个节点间的操作。加锁、时间序列等机制,只能保证单个节点上操作的 ACID 特性,无法保证节点间操作的 ACID 特性。
那么怎么做才会让实现不那么难呢?答案是你要掌握分布式事务协议,比如二阶段提交协议和 TCC(Try-Confirm-Cancel)。这也是我接下来重点和你分享的内容。
不过在带你了解二阶段提交协议和 TCC 之前,咱们先继续看看苏秦的故事,看这回苏秦又遇到了什么事儿。
最近呢,秦国按捺不住自己躁动的心,开始骚扰魏国边境,魏王头疼,向苏秦求助,苏秦认为“三晋一家亲”,建议魏王联合赵、韩一起对抗秦国。但是这三个国家实力都很弱,需要大家都同意联合,一致行动,如果有任何一方不方便行动,就取消整个计划。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • Joe Black
    在两阶段提交协议中,如果一个节点在第一阶段确认可以提交,然后崩溃了怎么办?第二阶段它实际没法真正应用自己那部分事务。这个看起来没法处理啊
    2020-02-17
    2
    4
  • 沉淀的梦想
    老师在"二阶段提交存在的问题"中说 "数据库是独立的系统",是表达的什么意思?
    2020-02-17
    1
    2
  • 施耀南
    谢谢韩老师的讲解,通过学习我的理解是:事务型分布式系统
    优点:就是最强一致性,保证所有节点都一致。
    缺点:复杂带来的开销,节点增加业务规模增加可能导致延迟。
    2020-02-17
    1
  • 一直有个问题,两阶段协议解决的是分布式事务问题,而raft 这些解决的是分布式数据共识问题,即数据在主从副本的条件下保持数据对外始终一样。为什么这两个总混在一起说是解决一致性的呢???
    2020-02-17
    1
    1
  • 洛奇
    老师,二阶段协议和TCC两种方式中,怎么处理各种特殊情况?比如节点故障或者消息延迟。
    2020-02-17
  • 一步
    文中说到 两阶段提交的弊端:在提交请求阶段,需要预留资源,在资源预留期间,其他人不能操作

    利用 TCC 可以解决,这里不是很明白,在 TCC中不是也有预留请求,同样预留资源的,难道在这期间其他事务可以使用这部分资源呢? 如果能使用预留资源,那么在执行Confirm确定操作的时候,之前预留的资源发生了变化,这样会不会有问题?
    2020-02-17
  • 一步
    感觉 TCC 也采用了两阶段提交的思想,是不是 TCC 是两阶段提交思想的一种实现?
    在看文中的图,是代表 TCC 中,是客户端直接通知所有的节点吗?没有所谓的协作者了?
    2020-02-17
  • 洛奇
    老师,幂等性的操作能举几个例子吗?
    2020-02-17
收起评论
8
返回
顶部