二阶段、XA、三阶段、TCC分别是什么?它们之间的关系及区别

您所在的位置:网站首页 xa是什么意思很污吗 二阶段、XA、三阶段、TCC分别是什么?它们之间的关系及区别

二阶段、XA、三阶段、TCC分别是什么?它们之间的关系及区别

2024-06-29 00:47| 来源: 网络整理| 查看: 265

目录

 

什么是XA?

什么是二阶段?

什么是三阶段?

什么是TCC?

TCC与XA两阶段提交有什么区别?

什么是XA?

XA是X/Open DTP组织(X/Open DTP group)定义的两阶段提交协议,XA被许多数据库(如Oracle、DB2、SQL Server、MySQL)和中间件等工具(如CICS 和 Tuxedo).本地支持 。XA就是X/Open DTP定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA接口函数由数据库厂商提供。通常情况下,交易中间件与数据库通过XA 接口规范,使用两阶段提交来完成一个全局事务,XA规范的基础是两阶段提交协议。

什么是二阶段?

二阶段是事务管理器(TM)和资源管理器(RM)形成的预提交和提交两个阶段。 RM就是数据库(mysql/oracle),TM可以理解为JVM。

步骤1:TM发起prepare预提交请求。

步骤2:RM回应请求,进入就绪态。

步骤3:TM发起commit提交请求。

步骤4:RM回应提交完成。

步骤1:TM发起prepare预提交请求。

步骤2:RM回应请求,存在未就绪。

步骤3:TM发起rollback回滚请求。

步骤4:RM回应回滚完成。

二阶段缺点

二阶段提交是阻塞线程的,没有超时机制。

什么是三阶段?

三阶段提交协议是2PC的改进版,将二阶段提交协议的阶段一,即“提交事务请求”一分为二,形成了由CanCommit、PreCommit和doCommit三个阶段组成的事务处理协议。

3

三阶段与二阶段相比做了哪些改进:

1、引入超时机制。同时在每个阶段协调者和参与者中都引入超时机制。 2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

CanCommit:询问是否可以提交事务

PreCommit:预提交

doCommit:正式提交

什么是TCC?

TCC就是try-confirm/cancel。

try:是在业务逻辑阶段把数据操作更新到中间表并记录操作痕迹。

confirm:是把所有中间步骤更新到原表操作。

cancel:是回滚。

因此,对于TM与RM的关系而言,TCC每一个步骤都是一次完整的事务,也就是说都落地到数据库中,数据库中的数据都发生了改变。

 

在这里插入图片描述

TCC与XA两阶段提交有什么区别?

1.XA是资源(数据库)的分布式事务,强一致性,在整个过程中,数据一直锁住状态;即从prepare到commit、rollback的整个过程中,TM一直把持着数据库的锁,如果有其他人要修改数据库的该条数据,就必须等待锁的释放。(简单一句话就是长事务风险) 另外在开发过程中,开发人员无感知XA的代码入侵(从Atomikos的例子我们可以感受到) 2.TCC是业务的分布式事务,最终一致性,不会出现长事务的锁风险。 为什么TCC不会出现长事务的锁风险呢?因为try是本地事务,锁定资源后就提交事务,confirm和cancel也是本地事务,可以直接提交事务;故多个短事务不会出现长事务的风险。 在开发过程中,开发人员感受到两阶段提交的存在;即开发人员必须实现try、confirm和cancel方法。

3.TCC中每一个步骤是一次独立的XA事务,而整个两阶段提交是一次XA事务。(个人理解)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3