Skip to content

Latest commit

 

History

History
61 lines (27 loc) · 4.7 KB

File metadata and controls

61 lines (27 loc) · 4.7 KB

X/Open DTP 与 XA 事务

X/Open 是一个欧洲基金会的公司名称,中文名称国际联盟有限公司。

X/Open DTP 全称 X/Open Distributed Transaction Processing Reference Model ,中文名称 X/Open 分布式事务处理参考模型,是X/Open 基金会规范的一个分布式事务处理模型,当然这个模型也是概念模型。

X/Open DTP

X/Open DTP 中定义了三个组件:

  • **AP(Application Program):**应用程序,参与分布式事务中的应用程序,比如微服务程序;
  • **RM(Resource Manager):**资源管理器,比如RDBMS(Relational Database Management System)关系数据库管理系统,主要作用还是管理资源,那就意味着,事务想要获得资源,必须要经过RM管理。其中RM自身支持事务(比如InnoDB)。
  • **TM(Transaction Manager):**事务管理器,负责协调和管理AP和RM之间的分布式事务完整性。主要的工作是提供AP注册全局事务的接口,颁发全局事务标识(GTID、XID之类 的),存储/管理全局事务的内容和决策并指挥RM做commit/rollback。

分布式事务下几个概念:

  • **事务:**一个事务是一个完整的工作单元,由多个独立的计算任务组成,这多个任务在逻辑上是原子的;
  • 全局事务: 对于一次性操作多个资源管理器的事务,就是全局事务;
  • 分支事务: 在全局事务中,某一个资源管理器有自己独立的任务,这些任务的集合作为这个资源管理器的分支任务;
  • TX协议: AP与TM之间交互协议(接口);
  • XA协议: TM与RM之间交互协议(接口)。

XA事务

提起MySQL的事务,我们最熟悉的几个字 -- XA事务。那 XA到底是什么?

2PC

XA ,全称 eXtended Architecture,是 X/Open组织在1991年发布的分布式事务处理(DTP) 规范XA 的目标确保跨异构后端数据存储(如数据库、应用程序服务器、消息队列、事务缓存等)执行的“全局事务”中的原子性。为了保证原子性,XA使用 两阶段提交(2PC) 来确保所有资源都一致地提交或回滚任何特定事务(即,所有资源都以原子方式执行相同的操作)。

具体来说,XA 描述了全局事务管理器和特定应用程序之间的接口。希望使用XA的应用程序将使用库或单独的服务与XA事务管理器进行交互。然后事务管理器将跟踪事务中的参与者(即应用程序正在写入的各种其他数据存储),并与他们一起执行两阶段提交协议。换句话说,XA事务管理器通常位于应用程序与要向其写入事务的服务器的现有连接之上。它维护一个关于提交或中止的决定的日志(类似于数据库维护自己写的日志的方式),当数据库失败并需要重新启动时,它可以使用该日志进行恢复。

许多软件供应商继续支持XA(这意味着软件可以参与XA事务),包括各种关系数据库和消息代理。

优缺点

由于XA使用两阶段提交(2PC),所以该协议的优点和缺点通常适用于XA。其主要优点是XA(使用2PC)允许跨多个异构技术进行原子事务(例如,单个XA事务可以包含来自不同供应商的多个数据库和消息代理),而传统的数据库事务仅限于单个数据库。(这句话很重要,也是描述分布式事务和传统数据库事务的最大区别)

主要缺点是2PC是一个阻塞协议:其他服务器需要等待 事务管理器 发出关于是否提交或中止每个事务的决定。如果 事务管理器 在等待其最终决定时脱机,则它们将被卡住并保持数据库锁,直到 事务管理器 再次联机并发布其决定。这种对锁的扩展持有可能会破坏使用相同数据库的其他应用程序。解决方案是超时回滚,具体关于2PC与3PC的文章参考这里

此外,如果 事务管理器 崩溃并且无法恢复其决策记录(例如,由于如何记录决策的错误,或由于服务器上的数据损坏),则可能需要手动干预。许多XA实现为事务提供了一个“逃生门”,以便独立地决定是提交还是中止(不等待事务管理器的消息),但这有违反原子性保证的风险,因此保留用于紧急情况。

参考资料:

XA 分布式事务原理