分布式事务

概念:分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。

分布式事务主要是解决在分布式环境下,组合事务的一致性问题。实现分布式事务有 3 种基本方法:

  • 基于 XA 协议的二阶段提交协议方法;
    1. 协调者向参与者发送执行消息,参与者开始执行,执行成功yes,失败no。
    2. 协调者根据响应,给参与者发送提交或回滚消息。
      缺点:
      同步阻塞问题:在执行过程中,所有参与节点都是事务阻塞型的。当本地资源管理器占有临界资源时,其他资源管理器如果要访问同一临界资源,会处于阻塞状态。
      单点故障问题:一旦事务管理器发生故障,整个系统都处于停滞状态。尤其是在提交阶段,一旦事务管理器发生故障,资源管理器会由于等待管理器的消息,而一直锁定事务资源,导致整个系统被阻塞。
      数据不一致问题:在提交阶段,当协调者向参与者发送 DoCommit 请求之后,如果发生了局部网络异常,或者在发送提交请求的过程中协调者发生了故障,就会导致只有一部分参与者接收到了提交请求并执行提交操作,但其他未接到提交请求的那部分参与者则无法执行事务提交。于是整个分布式系统便出现了数据不一致的问题。
  • 三阶段提交协议方法;
    • 三阶段提交对比二阶段提交引入了超时机制和准备阶段。
    1. 协调者向参与者询问是否可以执行事务提交操作,参与者能回复yes,不能no
    2. 协调者向参与者发送执行消息,参与者成功回复Ack 响应。(等待超时之后,协调者都没有收到参与者的响应,就执行中断事务的操作)
    3. 协调者向参与者发送提交消息,参与者回复Ack 响应。(如果长时间没有得到协调者的响应,在默认情况下,参与者会自动将超时的事务进行提交)
      缺点:2PC 和 3PC 这两种方法,有两个共同的缺点,一是都需要锁定资源,降低系统性能;二是,没有解决数据不一致的问题。
  • 基于消息的最终一致性方法。
    • 基于分布式消息的最终一致性方案的事务处理,引入了一个消息中间件(Message Queue,MQ),用于在多个应用之间进行消息传递

      基于 XA 协议的二阶段提交协议方法和三阶段提交协议方法,采用了强一致性,遵从 ACID,基于消息的最终一致性方法,采用了最终一致性,遵从 BASE 理论。
      

BASE理论:该理论的一个关键点就是采用最终一致性代替强一致性。

BASE 理论包括基本可用、柔性状态和最终一致性。

  • 基本可用:分布式系统出现故障的时候,允许损失一部分功能的可用性。比如,某些电商 618 大促的时候,会对一些非核心链路的功能进行降级处理。
  • 柔性状态:在柔性事务中,允许系统存在中间状态,且这个中间状态不会影响系统整体可用性。比如,数据库读写分离,写库同步到读库(主库同步到从库)会有一个延时,其实就是一种柔性状态。
  • 最终一致性:事务在操作过程中可能会由于同步延迟等问题导致不一致,但最终状态下,数据都是一致的。

BASE 理论为了支持大型分布式系统,通过牺牲强一致性,保证最终一致性,来获得高可用性,是对 ACID 原则的弱化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值