分布式技术原理与算法解析
聂鹏程
智载云帆 CTO,前华为分布式 Lab 资深技术专家
39663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
分布式技术原理与算法解析
15
15
1.0x
00:00/00:00
登录|注册

06 | 分布式事务:All or nothing

思考题
总结
知识扩展:刚性事务与柔性事务
三种实现方式对比
如何实现分布式事务?
什么是分布式事务?
分布式事务

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

你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
对于网上购物的每一笔订单来说,电商平台一般都会有两个核心步骤:一是订单业务采取下订单操作,二是库存业务采取减库存操作。
通常,这两个业务会运行在不同的机器上,甚至是运行在不同区域的机器上。针对同一笔订单,当且仅当订单操作和减库存操作一致时,才能保证交易的正确性。也就是说一笔订单,只有这两个操作都完成,才能算做处理成功,否则处理失败,充分体现了“All or nothing”的思想。
在分布式领域中,这个问题就是分布式事务问题。那么今天,我们就一起打卡分布式事务吧。

什么是分布式事务?

在介绍分布式事务之前,我们首先来看一下什么是事务。
事务(Transaction)提供一种机制,将包含一系列操作的工作序列纳入到一个不可分割的执行单元。只有所有操作均被正确执行才能提交事务;任意一个操作失败都会导致整个事务回滚(Rollback)到之前状态,即所有操作均被取消。简单来说,事务提供了一种机制,使得工作要么全部都不做,要么完全被执行,即 all or nothing。
通常情况下,我们所说的事务指的都是本地事务,也就是在单机上的事务。而事务具备四大基本特征 ACID,具体含义如下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式事务的实现方法及其特点 分布式事务是分布式系统中的重要组成部分,本文介绍了分布式事务的基本特征ACID,以及分布式事务的三种基本实现方法:基于XA协议的二阶段提交协议方法、三阶段提交协议方法和基于消息的最终一致性方法。其中,基于XA协议的二阶段提交协议方法和三阶段提交协议方法采用了强一致性,遵从ACID,而基于消息的最终一致性方法采用了最终一致性,遵从BASE理论。 文章通过详细的二阶段提交协议执行过程分析,深入探讨了其工作原理和应用场景,并通过实际案例生动展示了二阶段提交协议的具体应用过程。此外,还介绍了三阶段提交协议的改进,引入了超时机制和准备阶段,以解决二阶段提交的同步阻塞和数据不一致问题。 基于分布式消息的最终一致性方案通过消息传递机制和异步通信的方式,避免了通信阻塞,增加系统吞吐量,并解决了二阶段和三阶段方法在某些情况下导致的数据不一致问题。该方法适用于柔性事务,遵循BASE理论。 总结来说,本文详细介绍了分布式事务的特点和三种实现方法,为读者提供了重要参考,使其能够快速了解分布式事务的概念、特点和各种实现方法,以及它们在分布式系统设计和应用中的应用场景和优劣势。 通过对二阶段提交、三阶段提交和基于消息的最终一致性方法的对比,读者可以更好地理解这些方法的特点和适用场景,为设计和实现分布式系统提供了有益的指导。 在分布式系统设计与实现中,分布式事务是不可或缺的一部分,本文的总结有助于读者加深对分布式事务的理解,为实际应用提供了有益的参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(84)

  • 最新
  • 精选
  • 约书亚
    疑问不少 1. 2pc和3pc的第一步到底是不是“类似”?从本文中看,2pc corhort 收到CanCommit已经开始执行事务但不提交,3pc则写着在PreCommit阶段开始预提交。文中说二者第一步“类似”,但其实是非常不类似的吧? 2. 我看到的资料里,3pc出现的目的,并不是文中说的为了解决那两个问题,因为这两个问题的解决方案在2pc中也可以引入。同步阻塞问题和本地事务隔离性相关。数据不一致在两者也都会出现。3pc多了一步,这些就能避免了么? 3pc很多机制在这里没提到,这些才是真正对比2pc的改进。比如只要coordinator收到大多数ack,第三阶段即进入commit状态。本质上3pc并不能像共识算法那样保证一致性,而是比起2pc,增加了在一些未知状态下,“状态可能是成功”的判断依据。 3. 分布式消息中间件实现事务,重点是回查,这点没提啊。

    作者回复: 从你的提问中,可以看出你很爱思考。首先,非常抱歉,因为要忙每周的上线稿子定稿和后续新章节,所以没能及时回复,后面我会注意这个问题,尽量及时回复,希望理解。下面看一下这三个问题: 1. 2pc和3pc的第一步在文中的类似是指,均是通过协调者询问参与者是否可以正常执行事务提交操作,参与者也都会给协调者回复。在2pc中,如果所有参与者都返回结果后,会进入第二阶段的提交阶段,也可以说是执行阶段,根据第一阶段的投票结果,进行提交或取消。在3pc中,进入真正的提交阶段前,会有一个预提交阶段,这个预提交阶段不会做真正的提交,会将相关信息记录到事物日志中,当所有参与者都返回YES后,才会进入真正的提交阶段或执行阶段。 2. 3pc通过在协调者和参与者均引入了超时机制(2pc只是在协调者引入了超时)减少了整个集群的阻塞时间,在一定程度上减少或减弱了2pc中出现的同步阻塞问题;3pc中引入了预提交阶段,相对于2pc来讲,相当于增加了一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。 3. 不知道你说的回查是不是指的“失败重试”?如果是的话,这个和业务设计有关系,在介绍ebay系统中有提到,但本文主要是针对基于分布式消息的最终一致性方案的原理进行介绍,所以没有展开介绍。

    2019-10-04
    17
    47
  • 逆流的鱼
    三阶段为什么就不阻塞了?没明白

    作者回复: 不阻塞的主要原因是在三阶段中引入了超时机制,有了超时机制协调者不用死等其它节点,其它节点也无需死等协调者,从而不会造成堵塞。

    2019-10-10
    3
    14
  • 大魔王汪汪
    可靠消息这种方式必须采用mq吗?使用db是不是也可以,看起来只是一个事务状态的存储和管理,是多个两阶段提交的组合啊!

    作者回复: 你这个问题提的很好!没有说必须采用MQ,但是MQ天生就是为了高效信息交互而生,所以我在这里是以MQ进行讲解的。使用DB自然是可以的,不过考虑到DB为了保证各种约束而产生的开销,性能上肯定会打一定的折扣。

    2019-10-06
    7
  • licong
    三阶段也有一个协调者,为什么就不会有单点故障了?

    作者回复: 不是绝对地没有单点故障问题了,是一定程度上减少了单点故障带来的问题。三阶段协议中,参与者也引入了超时机制,如果长时间没有得到协调者的响应,在默认情况下,参与者会自动将超时的事务进行提交,不会像两阶段提交那样被阻塞住。

    2019-10-09
    2
    4
  • 等风来🎧
    你好,应该是3PC把2PC的投票阶段再次一分为二,不是把提交阶段一分为二了吧

    作者回复: 可以这么理解,也可以理解为3PC是在2PC的第一阶段和第二阶段之间引入了一个预提交阶段。

    2020-06-05
    1
  • 破发者
    老师好: 3pc在 DoCommit 阶段,当参与者向协调者发送 Ack 消息后,整个事务不就结束了吗?为什么文章里还说如果长时间没有得到协调者的响的话参与者会自动将超时的事务进行提交。

    作者回复: 3PC协议在协调者和参与者均引入了超时机制。即当参与者在预提交阶段向协调者发送 Ack消息后,如果长时间没有得到协调者的响应,在默认情况下,参与者会自动将超时的事务进行提交,从而减少整个集群的阻塞时间,在一定程度上减少或减弱了2PC中出现的同步阻塞问题。

    2020-05-28
    1
  • 疯琴
    请问老师一个问题:两阶段提交中,第一阶段订单系统只是准备好增加一条关于用户 A 购买 100 件 T 恤的信息并锁库,但是没有实际的数据操作,那么在第二阶段不是直接解锁就好了么,何来的数据退回呢?

    作者回复: 因为在第一阶段的日志系统这些会记录信息的,只是没有提交修改具体的数据,当失败的时候,日志系统记录的相关信息也需要进行处理,回退到之前版本的

    2019-10-12
    2
  • boglond
    CAP理论老师没有讲一讲。

    作者回复: CAP会在后面第五站分布式数据存储中进行讲解

    2019-10-06
  • tt
    老师,分布式事物,可以用于工作流系统么? 比如工作流上总体有3个节点,A,B,C,每个节点的操作均分为经办和复合操作,当作业顺序经历A→B→C后,一个事务才算完成。 中间任意一个环节都可能发生回退,如C认为条件不成立而将作业退回给B。 最后,每个环节经历的事件可能都很长,已天为度量单位。 我想请教一下老师,这样的系统还算是分布式系统么?如果不是,那该如何借鉴分布式事物的原理进行设计呢?

    作者回复: 你说的工作流系统中的作业顺序可以设计为分布式事务的。分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。重点在于你的工作流系统是否运行在分布式环境中,该系统本身是否为分布式系统。

    2019-10-05
收起评论
显示
设置
留言
84
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部