【回顾】
在上篇博客中,我们总结了分布式事务的几种解决方案,本篇博客来详细了解一下方案之一:全局事务。
【DTP模型】
1. DTP模型是什么?
X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由这个厂商进行具体的实现。
2. DTP模型组件?
- AP(Application Program): 也就是应用程序,可以理解为DTP的程序;
- RM(Resource Manager): 资源管理器(这里可以是一个DBMS,或者消息服务器管理系统)应用程序通过资源管理器对资源进行控制,资源必须实现XA定义的接口;
- TM(Transaction Manager): 事务管理器,负责协调和管理事务,提供给AP应用程序编程接口以及管理资源管理器。
3. DTP模型组件间的关系?
下面对上图做一些简要说明:
- AP可以和TM以及RM通信;
- RM 和TM之间可以相互通信;
- DTP模型里面定义了XA接口,TM和RM通过XA接口进行双向通信。如:TM通知RM提交事务或回滚事务,RM把提交结果通知给TM。
- AP和RM之间则通过RM提供的本地接口(Native API)进行资源控制,这个接口没有进行规范,各个厂商自己实现自己的资源控制,比如Oracle自己的数据库驱动程序。
4. DTP模型相关概念?
- XA: 是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(TM)和(局部)资源管理器(RM)之间的接口。主流的关系型数据库产品都是实现了XA接口的。
- 事务 : 一个事务是一个完整的工作单元,由多个独立的计算任务组成,这多个任务在逻辑上是原子的。
- 全局事务:对于一次性操作多个资源管理器的事务,就是全局事务。
- 分支事务:在全局事务中,某一个资源管理器有自己独立的任务,这些任务的集合作为这个资源管理器的分支任务
【两阶段提交协议】
1. 协议的产生?
要想控制分布式事务,仅仅靠厂商实现XA规范是不够的,所以引入了两阶段提交协议。
2. 什么是两阶段提交协议?
指事务的提交分为两个阶段:预提交阶段和决策后阶段。
两阶段提交用来协调参与一个更新中的多个服务器的活动,以防止分布式系统部分失败时产生数据的不一致性。
例如,如果一个更新操作要求位于三个不同结点上的记录被改变,且其中只要有一个结点失败,另外两个结点必须检测到这个失败并取消它们所做的改变。
3. 实现两阶段提交协议前提?
为了支持两阶段提交,一个分布式更新事务中涉及到的服务器必须能够相互通信。一般来说一个服务器会被指定为”控制”或”提交”服务器并监控来自其它服务器的信息。
4. 两阶段提交协议过程?
- 第一阶段
在分布式更新期间,各服务器首先标志它们已经完成(但未提交)指定给它们的分布式事务的那一部分,并准备提交(以使它们的更新部分成为永久性的)。
- 第二阶段
如果有一结点不能响应,那么控制服务器要指示其它结点撤消分布式事务的各个部分的影响。如果所有结点都回答准备好提交,控制服务器 则指示它们提交并等待它们的响应。等待确认信息阶段便是第二阶段。
在接收到可以提交指示后,每个服务器提交分布式事务中属于自己的那一部分,并给控制服务器 发回提交完成信息。
5. 两阶段提交协议过程示意图: