分布式事务理论

CAP定理

对于共享数据系统,最多只能同时拥有CAP其中的两个

选项 描述
C(Consistence) 一致性:分布式环境中,数据在多个副本之间能够白痴一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处在一致的状态
A(Availability) 可用性:指系统提供的服务必须一直处于可用的状态,每次请求都能获得非错的响应,但是不保证获取的数据为最新的数据
P(Partition tolerance) 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障

BASE(最终一致性)

BASE是指基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency)。BASE是对CAP中一致性和可用性权衡的结果,核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用:是指分布式系统在出现不可预估故障时,允许损失部分可用性
  • 软状态:允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
  • 最终一致性:强调系统中的所有数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性

分布式事务模式

2PC模式

2PC(two phase commit),两阶段提交,就是将事务的提交过程氛围两个阶段来进行处理,事务的发起者称为协调者,事务的执行者称为参与者,协调者统一协调参与执行。

  • 阶段1:准备阶段

协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复;各参与者执行事务操作,但不提交事务,将undo和redo日志记入事务日志中;如参与者执行成功,给协调者反馈yes;如执行失败,给协调者反馈no。

  • 阶段2:提交阶段

如果协调者收到了参与者的失败消息或超时,直接给每个参与者发送回滚消息;否则发送提交消息。
2PC优缺点:

  • 实现简单
  • 性能问题:所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈
  • 可靠性问题:协调者存在单点故障问题,如果协调者出现故障,参与者将一直处于锁定状态
  • 数据一致性问题:在阶段2中,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。

    3PC模式

    三阶段提交是两阶段提交的改进版本,与两阶段提交不同的是,引入了超时机制。同时在协调者和参与者中都引入了超时机制。三阶段提交将两阶段的准本阶段拆分为两个阶段,插入了一个preCommit阶段,解决了原先在两阶段提交中,参与者在准备之后,由于协调者或参与者发生崩溃或错误,而导致参与者无法知晓处于长时间等待的问题,如果在指定的时间内协调者没有收到参与者的消息则默认失败。

  • 阶段1:canCommit:协调者向参与者发送commit请求,参与者如果可以提交就返回yes响应,否则返回no响应

  • 阶段2:preCommit:协调者根据阶段1参与者的反应情况执行预提交事务或中断事务操作。
    • 参与者均返回yes:协调者向所有参与者发送preCommit请求,参与者收到后,执行事务操作,但不提交;将undo和redo信息记入事务日志中;各参与者向协调者反馈ack响应或no响应,并等待最终提交指令。
    • 任何一个参与者反馈no或等待超时,协调者向所有参与者发送abort请求,无论收到协调者发出的abort请求,或者在等待协调者请求过程中出现超时,参与者均会中断事务
  • 阶段3:doCommit:该阶段进行真正的事务提交,根据阶段2反馈的结果完成事务提交或中断操作。

相比2PC,3PC降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题,节点3中协调者出现问题时,参与者会继续提交事务。

XA

XA是由X/Open组织提出的分布式事务的规范,是基于两阶段提交协议。XA规范主要定义了全局事务管理器(TM)和局部资源管理器(TM)之间的接口。目前主流的关系型数据库产品都实现了XA接口
image.png