分布式事务(一)

一、简介

1.1、分布式事务概念

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

1.2、举例

比如在分布式电商系统中,如果用户购买了一件商品,正常情况下会在订单系统中增加一条订单数据,同时也会从库存系统中将该商品数量减去1,两个系统会保持数据一致性;
那么当系统群出现异常时,订单系统新增了数据,但是库存系统未减去商品数量,这样就会导致数据的不一致性,而这种事故正式由于为控制分布式事务产生的。
在这里插入图片描述

二、XA两阶段提交

2.1、XA简介

XA 协议由 Oracle Tuxedo 首先提出的,并交给 X/Open 组织,作为资源管理器(数据库) 与事务管理器的接口标准。目前,Oracle、Informix、DB2 和 Sybase 等各大数据库厂家都提 供对 XA 的支持。XA 协议采用两阶段提交方式来管理分布式事务。XA 接口提供资源管理 器与事务管理器之间进行通信的标准接口。
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交 易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA 接口函数由数据库厂 商提供。
X/Open 组织(即现在的 Open Group)定义了分布式事务处理模型。X/Open DTP 模型 (1994)包括应用程序(AP)、事务管理器(TM)、资源管理器(RM)、通信资源管理 器(CRM)四部分。一般,常见的事务管理器(TM)是交易中间件,常见的资源管理器(RM) 是数据库,常见的通信资源管理器(CRM)是消息中间件。

2.2、一阶段提交

优点
1)相对简单
2)无需与其它服务交互,性能较好
缺点
1)无法支撑多数据源事务(分布式系统中)
在这里插入图片描述

2.3、二阶段提交

二阶段协议通过将两层变为三层,增加了中间的管理者角色,从而协调多个数据源之间的关系,二阶段提交协议分为两个阶段
在这里插入图片描述
第一阶段:事务管理器通知参与该事务的各个资源管理器,通知他们开始准备事务,资源管理器接收到消息后开始准备阶段,写好事务日志并执行事务,但不提交,然后将 是否就绪的消息返回给事务管理器;
第二阶段:事务管理器在接受各个消息后,开始分析,如果有任意其一失败,则发送回滚命令,否 则发送提交命令;
在这里插入图片描述
优点
1)二阶段提支持分布式系统事务;
2)二阶段提交协议为了保证事务的一致性,不管是事务管理器还是各个资源管 理器,每执行一步操作,都会记录日志,为出现故障后的恢复准备依据;
缺点
1)二阶段提交协议的存在的弊端是阻塞,因为事务管理器要收集各个资源管理器的响应 消息,如果其中一个或多个一直不返回消息,则事务管理器一直等待,应用程序也被阻塞, 甚至可能永久阻塞;
2)两阶段提交理论的一个广泛工业应用是 XA 协议。目前几乎所有收费的商业数据库都 支持 XA 协议。XA 协议已在业界成熟运行数十年,但目前它在互联网海量流量的应用场景 中,吞吐量这个瓶颈变得十分致命,因此很少被用到;

三、TCC方案

3.1、简介

TCC 是由支付宝架构师提供的一种柔性解决分布式事务解决方案,主要包括三个步骤:
1)Try:预留业务资源/数据效验
2)Confirm:确认执行业务操作
3)Cancel:取消执行业务操作
在这里插入图片描述

3.2、原理

TCC 方案在电商、金融领域落地较多。TCC 方案其实是两阶段提交的一种改进。其 将整个业务逻辑的每个分支显式的分成了 Try、Confirm、Cancel 三个操作。Try 部分完成 业务的准备工作,confirm 部分完成业务的提交,cancel 部分完成事务的回滚。
在这里插入图片描述
事务开始时,业务应用会向事务协调器注册启动事务。之后业务应用会调用所有服务 的 try 接口,完成一阶段准备。之后事务协调器会根据 try 接口返回情况,决定调用 confirm 接口或者 cancel 接口。如果接口调用失败,会进行重试;
微服务倡导服务的轻量化、易部署,而 TCC 方案中很多事务的处理逻辑需要应用自己 编码实现,复杂且开发量大;

3.3、优缺点

优点
1)让应用自己定义数据库操作的粒度,使得降低锁冲突、提高吞吐量成为可能
缺点
1)对应用的侵入性强。业务逻辑的每个分支都需要实现 try、confirm、cancel 三个操作,应用侵入性较强,改造成本高
2)实现难度较大。需要按照网络状态、系统故障等不同的失败原因实现不同的 回滚策略。为了满足一致性的要求,confirm 和 cancel 接口必须实现幂等

猜你喜欢

转载自blog.csdn.net/shaixinxin/article/details/108411712