分布式事务:XA、TCC、最终一致性方案

本文深入探讨分布式事务,包括ACID特性、常见事务场景。详细介绍了XA协议的2PC与3PC过程,强调其优缺点。接着,讨论了TCC柔性事务的Try、Confirm、Cancel三个阶段。本地消息表方案解决原子性与可靠性问题,但可能引发数据不一致。最后,提到了可靠消息最终一致性方案和最大努力通知方案,以应对不同分布式事务需求。
摘要由CSDN通过智能技术生成

1 分布式事务

1.1 事务的四个特性 ACID

Atomicity 原子性

事务中所有的操作要么一起提交,要么一起回滚。

Consistency 一致性

事务一旦提交,数据就会从一个一致性状态,到达另一个一致性状态。

Isolation 隔离性

一个事务中对数据的更改不会影响到另一个事务中的数据。

Durablity 持久性

一旦事务提交,那么对于数据库的更改就是永久的。

1.2 事务场景

在这里插入图片描述

假设有这么个场景,用户下单购买商品,则会调用订单中心让其生成订单记录,同时调用库存中心让其扣除商品库存。这两个中心都有着各自的数据库。这期间就有可能会出现:
订单记录生成失败,但是商品库存扣除成功
订单记录生成成功,但是商品库存扣除失败
这样就会导致数据不一致的问题,因此这时候就需要分布式事务来解决这类问题。
由此可见分布式事务主要为了保障一个请求在多个微服务调用链中,对于微服务所造成数据修改的原子性问题。


2 XA协议

XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。

2.1 两阶段提交 2PC

在这里插入图片描述

2.1.1 处理流程

准备阶段
  • 事务管理者向事务参与者发起Prepare消息,询问其是否能够正常执行事务,并开始等待其回应。
  • 事务参与者接收到Prepare消息后,开始执行本地事务,但并未真正提交,同时将undo、redo信息写入日志。
  • 事务参与者根据本地事务的执行情况,返回Ready或Rollback消息给事务管理者。
提交阶段

所有事务参与者都返回Ready消息

  • 事务管理者发送Commit消息给事务参与者
  • 事务参与者接收到Commit消息后,会正式提交事务,并释放被锁定的资源。
  • 事务参与者在事务提交后,返回Ack给事务管理者

事务参与者中任意一个

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值