分布式事务-Seata原理

一.事务的ACID原则

● 原子性

        事务中的所有操作,要么全部成功,要么全部失败。

● 一致性

        要保证数据库内部完整性约束、声明性约束。

● 隔离性

        对同一资源操作的事务不能同时发生。

● 持久性

        对数据库做的一切修改将永久保存,不管是否出现故障。

二.CAP定理

        1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标: Consistency(一致性), Availability(可用性), Partition tolerance (分区容错性)。

        Eric Brewer 说,分布式系统无法同时满足这三个指标。 这个结论就叫做 CAP 定理。

三.BASE理论

        BASE理论是对CAP的一种解决思路,包含三个思想: Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。 Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。 Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

        而分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理和BASE理论:         

        ● AP模式:各子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施恢复数据即可,实现最终一致。

        ● CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致。但事务等待过程中,处于弱可用状态。

四.Seata

1.什么是Seata

        Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

        官网地址:http://seata.io/,其中的文档、播客中提供了大量的使用说明、源码分析。

2.Seata架构

Seata事务管理中有三个重要的角色:

        ● TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

        ● TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

        ● RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

3.Seata的分布式事务解决方案

        ● XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入

        ● TCC模式:最终一致的分阶段事务模式,有业务侵入

        ● AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式

        ● SAGA模式:长事务模式,有业务侵入

4.Seata各个分布式事务方案实现原理

(1)XA模式        

● RM一阶段的工作:

        ①注册分支事务到TC。

        ②执行分支业务sql但不提交。

        ③报告执行状态到TC。

● TC二阶段的工作:

        ①TC检测各分支事务执行状态。

        ②如果都成功,通知所有RM提交事务。

        ③如果有失败,通知所有RM回滚事务。

●RM二阶段的工作:

        ①接收TC指令,提交或回滚事务。

(2)AT模式

● 阶段一RM的工作:

        ①注册分支事务

        ②记录undo-log(数据快照)

        ③执行业务sql并提交

        ④报告事务状态

● 阶段二提交时RM的工作:

        ①删除undo-log即可

● 阶段二回滚时RM的工作:

        ①根据undo-log恢复数据到更新前

(3)TCC模式

        TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。需要实现三个方法:

        Try:资源的检测和预留;

        Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。

        Cancel:预留资源释放,可以理解为try的反向操作。

(4)SAGA模式

        Saga模式是SEATA提供的长事务解决方案。也分为两个阶段:

                ● 一阶段:直接提交本地事务

                ●二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚

        Saga模式优点: 事务参与者可以基于事件驱动实现异步调用,吞吐高 一阶段直接提交事务,无锁,性能好 不用编写TCC中的三个阶段,实现简单。

        缺点: 软状态持续时间不确定,时效性差 没有锁,没有事务隔离,会有脏写。

5.四种模式对比

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seata是一款开源的分布式事务解决方案,它提供了高性能和简单易用的分布式事务服务。Seata支持AT、TCC、SAGA和XA事务模式,旨在为用户打造一站式的分布式解决方案。AT模式是Seata的一种事务模式,它基于支持本地ACID事务的关系型数据库,并通过JDBC访问数据库。在AT模式中,分支的本地事务可以在全局事务的第一阶段提交后立即释放本地事务锁定的资源。与XA事务相比,AT模式通过回滚日志的方式,在第一阶段释放对资源的锁定,降低了锁范围,提高了效率。在第二阶段提交时,Seata的整体执行机制可以大致分为两个阶段:发起方TM向TC申请开启全局事务并生成唯一的全局事务标识XID,RM向TC注册分支事务并与XID绑定,TM向TC发起XID下的所有分支事务的全局提交或回滚请求,TC汇总事务信息并决定最终是提交还是回滚,通知所有RM提交或回滚资源,最终完成分布式事务的提交或回滚。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Seata简单介绍及其原理(一)](https://blog.csdn.net/qq_29860591/article/details/103776602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [分布式事务Seata原理](https://blog.csdn.net/a745233700/article/details/122402795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值