【分布式事务】全局事务

时间:2024-03-18 15:39:43

【回顾】

    在上篇博客中,我们总结了分布式事务的几种解决方案,本篇博客来详细了解一下方案之一:全局事务。

【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. 两阶段提交协议过程示意图:

        【分布式事务】全局事务

【标准分布式事务优缺点】

    通过实现XA接口规范,加上两阶段提交协议,我们可以实现对分布式事务的控制,此方案也是标准分布式事务解决方案。

    此标准分布式事务解决方案,既有优势也有不足:

        优点在于严格保证了事务的ACID特性;

        缺点在于效率非常低,原因如下:

            - 全局事务方式下,全局事务管理器(TM)通过XA接口使用二阶段提交协议(2PC)与资源层(如数据库)进行交互。使用全局事务,数据被Lock的时间跨整个事务,直到全局事务结束。

            - 2PC是反伸缩模式,在事务处理过程中,参与者需要一直持有资源直到整个分布式事务结束。这样,当业务规模越来越大的情况下,2PC的局限性就越来越明显,系统可伸缩性会变得很差。

            - 与本地事务相比,XA协议的系统开销相当大,因而应当慎重考虑是否确实需要分布式事务,而且只有支持XA协议的资源才能参与分布式事务。

【总结】

    通过本篇博客,我们了解了解决分布式事务的第一种方案,即全局事务,也称为刚性事务。

    但此方案最大的问题在于性能太差,根本不适合高并发的系统。因此,在微服务架构中,通常采用的是柔性事务去解决分布式事务问题,下篇博客继续学习。