0%

分布式事务

分布式事务

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点上。

分布式事务模型和规范

The Open Group提出了一个分布式事务规范-XA,以及分布式事务处理模型-X/OpenDTP模型

X/OpenDTP模型

分布式事务DTP模型

该模型中定义了三个组件,即Application Program,Resource Manager和Transaction Manager

  • Application Program AP,即应用程序,可以理解为使用DTP模型的程序,定义了事务边界,并定义了构成该事务的应用程序的特定操作

  • Resource Manager RM,即资源管理器,可以理解为DBMS系统,应用程序通过资源管理器对资源进行控制,资源管理器能够提供单数据库的事务能力,通过XA接口将本数据库的提交、回滚等能力提供给事务管理器调用,以帮助事务管理器实现分布式的事务管理,资源必须实现XA定义的接口,资源管理器提供了存储共享资源的支持

    XA接口是DTP模型定义的接口,用于向事务管理器提供该资源管理器的提交、回滚能力

  • Transaction Manager TM,即事务管理器,负责协调和管理事务,提供给AP应用程序编程接口并管理资源管理器。事务管理器向事务指定标识,监视它们的的进程,并负责处理事务的完成和失败。事务分支标识(XID)由TM指定,以标识一个RM内的全局事务和特定分支,它是TM中日志与RM中日志之间的相关标记。两阶段提交或者回滚需要XID,以便在系统启动时执行再同步操作

    事务管理器还管理着所有的资源管理器,通过它们提供的XA接口来统一调度这些资源管理器,以实现分布式事务

    DTP只是一套实现分布式事务的规范,并没有定义具体如何实现分布式事务,TM可以采用2PC、3PC、Paxos等协议实现分布式事务。

AP可以和TM、RM通信,TM和RM可以互相通信,DTP模型中定义了XA接口,TM和RM通过XA接口进行双向的通信

分布式事务AP:TM:RM关系

还有其他几个需要注意的概念

  • 事务 一个事务是一个完整的工作单元,由多个独立的计算任务组成,这多个任务在逻辑上是原子的
  • 全局事务 一次性操作多个资源管理器的事务
  • 分支事务 在全局事务中,每一个资源管理器有自己独立的任务,这些任务的集合是这个资源管理器的分支任务
  • 控制线程 用来表示一个工作线程,主要是关联AP、TM、RM三者的线程,也就是事务上下文环境,用来标识全局事务和分支事务关系的线程

XA

两阶段提交协议

两阶段提交协议(Two-phase Commit)2PC经常用来实现分布式事务,这个两阶段提交是相对于单库的事务提交方式来说的,在单库时完成相关的数据操作后,就会直接提交或者回滚,在分布式系统中,在提交之前增加了准备的阶段,所以称为两阶段提交

在两阶段协议中,一般包含两类节点:一类为协调者,一个系统中只有一个;一类为事务参与者。协议中每个节点都会记录操作日志并进行持久化

执行过程

  • 阶段一:请求阶段,协调者通知事务参与者准备提交或取消事务,然后进入表决过程,在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地执行成功)或者取消(事务参与者本地执行失败)
  • 阶段二:提交阶段,协调者基于第一阶段的投票结果进行决策:提交或者取消,当且仅当所有参与者同意提交事务,协调者才通知所有参与者提交事务,否则协调者通知所有参与者取消事务
都成功的情况

所有的资源全部成功才算是成功

阶段一
两阶段提交-成功一
阶段二
两阶段提交-成功二
失败的情况

准备阶段有一个资源失败就会失败

阶段一
两阶段提交-失败一
阶段二
两阶段提交-失败二

可能存在的问题

  • 事务参与者发生故障,可能很久都不会回复。需要给每个事务设置一个超时时间,如果某个事务参与者一直不响应,到达超时时间后整个事务失败
  • 协调者发生故障,协调者需要将事务相关信息记录到操作日志并同步到备用协调者,加入协调者发生故障,备用协调者可以接替完成后续工作

欢迎关注我的其它发布渠道