分布式事务探讨系列(六):开源分布式事务Seata

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

2019年1月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。Fescar 开源后,蚂蚁金服加入 Fescar 社区参与共建,并在 Fescar 0.4.0 版本中贡献了 TCC 模式。

2019年3月,对 Fescar 进行品牌升级,并更名为 Seata,意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案。

蚂蚁金服内部大量使用TCC解决跨服务事务问题,TCC是一种高性能灵活的事务解决方案,支持了蚂蚁金服双十一的高性能需求,支持了异地多活的高可用需求;此外,为了让分布式事务使用更加便捷,我们推出AT、XA 两种无侵入的事务解决方案;当前蚂蚁的分布式事务解决方案主要有TCC、AT和XA 三种模式,丰富的模式覆盖了分布式事务的各类使用场景。

蚂蚁金服分布式事务经过12年的发展和演进,积累了TCC、AT、XA 三种使用模式,有丰富的应用场景,在高性能和高用方面也有大量实践经验;开源产品Seata中将逐步集成 AT、TCC、和XA三种模式,目前已经有了AT和TCC模式,XA也已规划。

 

AT模式

步骤:

1.TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
2.XID 在微服务调用链路的上下文中传播。
3.RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
4.TM 向 TC 发起针对 XID 的全局提交或回滚决议。
5.TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚,这个组件需要独立部署维护。
Transaction Manager (TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

虽然是二阶段提交协议的分布式事务,但是其解决了上面XA的一些缺点:

单点问题:虽然目前还是单server的,但是官方预计将会在0.5.x中推出HA-Cluster,到时候就可以解决单点问题。
同步阻塞:在第一阶段的时候本地事务就已经提交释放资源了,不会像XA会再两个prepare和commit阶段资源都锁住,并且Seata,commit是异步操作,也是提升性能的一大关键。
数据不一致:如果出现部分commit失败,那么Seata-server会根据当前的事务模式和分支事务的返回状态的结果来进行不同的重试策略。并且fescar的本地事务会在一阶段的时候进行提交,其实单看数据库来说在commit的时候数据库已经是一致的了。
只能用于单一数据库: Seata提供了两种模式,AT和MT。在AT模式下事务资源可以是任何支持ACID的数据库,在MT模式下事务资源没有限制,可以是缓存,可以是文件,可以是其他的等等。当然这两个模式也可以混用。

 

TCC模式

Seata 框架把每组 TCC 接口当做一个 Resource,称为 TCC Resource。这套 TCC 接口可以是 RPC,也可以是服务内 JVM 调用。在业务启动时,Seata 框架会自动扫描识别到 TCC 接口的调用方和发布方。如果是 RPC 的话,就是 sofa:reference、sofa:service、dubbo:reference、dubbo:service 等。
扫描到 TCC 接口的调用方和发布方之后。如果是发布方,会在业务启动时向 TC 注册 TCC Resource,与 DataSource Resource 一样,每个资源也会带有一个资源 ID。
如果是调用方,Seata 框架会给调用方加上切面,与 AT 模式一样,在运行时,该切面会拦截所有对 TCC 接口的调用。每调用一次 Try 接口,切面会先向 TC 注册一个分支事务,然后才去执行原来的 RPC 调用。当请求链路调用完成后,TC 通过分支事务的资源 ID 回调到正确的参与者去执行对应 TCC 资源的 Confirm 或 Cancel 方法。

TCC具体实现方法跟之前的TCC类似:

1.初步操作 Try:完成所有业务检查,预留必须的业务资源。
2.确认操作 Confirm:真正执行的业务逻辑,不做任何业务检查,只使用 Try 阶段预留的业务资源。因此,只要 Try 操作成功,Confirm 必须能成功。另外,Confirm 操作需满足幂等性,保证一笔分布式事务能且只能成功一次。
3.取消操作 Cancel:释放 Try 阶段预留的业务资源。同样的,Cancel 操作也需要满足幂等性。

 

Seata 项目地址:
https://github.com/seata/seata

目前规划:

参考:

https://mp.weixin.qq.com/s/iR4Z-lEG1L9OJl7rMYzi8Q

https://www.jishuwen.com/d/2Zs0#tuithttps://yq.aliyun.com/articles/698995

 

SeataSeata——分布式事务框架(理论篇) 阅读详情

相关推荐

什么是分布式事务SeataSeata的几种事务模式详解

目录概念发展历程核心组件三种事务模式AT模式前提一个分布式事务Seata中的执行流程MySQL XA方案MySQL XA中拥有两种角色:TCC模式Saga模式 概念 Seata(原名Fescar) 是 阿里巴巴 开源分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。 发展历程 2014 年,阿里中间件团队发布 TXC(Taobao Trans...

weixin_45661382的博客 4319

分布式事务seata

seata

一条没有梦想的闲鱼的博客 2万+

SpringCloud实战:Seata分布式事务整合指南

本文介绍了SpringCloud分布式事务框架Seata的安装与使用。主要内容包括:1) Seata服务端配置,包括Nacos注册中心设置和配置上传;2) 项目改造步骤,添加Seata依赖和事务分组配置;3) 业务数据库准备和关键代码实现(@GlobalTransactional注解使用);4) 网关路由配置和测试验证方法。文章详细演示了如何在微服务架构中通过Seata解决跨服务事务一致性问题,包括正常提交和异常回滚场景的测试验证,为开发者提供了完整的分布式事务解决方案实践指南。

技术Z先生的博客 1536

Seata分布式事务

Seata分布式事务Seata分布式事务1 事务概念1.1 事务简介1.2 本地事务1.3 分布式事务1.3.1 跨库事务1.3.2 分库分表事务1.3.3 跨应用事务2 分布式理论2.1 CAP原理2.2 BASE理论2.3 刚柔事务3 常用事务解决方案模型3.1 DTP模型3.2 2PC/3PC3.3 TCC3.4 MQ分布式事务4 Seata 分布式事务4.1 Seata AT模式4.1.1 AT模式工作机制4.1.2 AT模式工作流程描述4.1.3 Seata-Server安装4.1.4 Seata

m0_46690280的博客 2694

Seata实现分布式事务

目录1 分布式事务解决方案-面试1.1 本地事务与分布式事务1.1.1 事务1.1.2 本地事务1.1.3 分布式事务1.2 分布式事务相关理论1.2.1 CAP定理1.2.2 BASE理论1.2.2.1 Basically Available(基本可用)1.3 分布式事务解决方案-面试1.3.1 基于XA协议的两阶段提交1.3.2 TCC补偿机制1.3.3 消息最终一致性-重点2 基于Seata实现分布式事务2.1 Seata简介2.2 Seata事务模式-AT模式2.3 Seata Server端环境准

赵广陆 6407

分布式事务--Seata

分布式事务--Seata

忆~遂愿的博客 2469

分布式事务Seata

seata 是事务,是保持一致性的,在高并发情况下不安全,需要加分布式锁。

Eris_QwQ的博客 3054

分布式事务管理(Seata)

1、概述 ①、分布式事务问题 分布式前 单机单库,即一个web服务仅对应一个MySQL数据库 1:N​或者N:N,也就是一个服务对应多个数据库或多个服务对应多个数据库。 分布式后 单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据—致性由本地事务来保证,但是全局的数据一致性问题没法保证。 ②、什么是Seata 官方中文档 Seata(Simple Extensible Autonomous T

两米以下皆凡人的博客 4624

微服务系列分布式事务seata

本篇文章是为了记录分布式事务、解决分布式事务问题的。阅读这篇文章,你将了解事务管理中几种角色之间的相互协作,以及利用Seata中的XA和AT策略解决分布式事务存在的数据不一致问题。

wzc200406的博客 1887

分布式事务Seata

分布式事务seata

DarzenWong的博客 9336

Spring Cloud Alibaba系列分布式事务Seata

Spring Cloud Alibaba系列分布式事务SeataSeata是Alibaba开源的一款分布式事务解决方案框架,致力于提供简单易用,高性能的服务。Seata支持多种分布式事务解决方法,比如常见的TCC、XA、SAGA,同时还有独创的AT模式

Nicky's blog 2833

分布式事务框架Seata原理

- 什么是Seata Seata是由阿里中间件团队发起的开源项目 Fescar,后更名为Seata,它是一个是开源分布式事务框架。 传统2PC的问题在Seata中得到了解决,它通过对本地关系数据库的分支事务的协调来驱动完成全局事务,是工作在应用层的中间件。主要优点是性能较好,且不长时间占用连接资源,它以高效并且对业务0侵入的方式解决微服务场景下面临的分布式事务问题,它目前提供AT模式(即2PC)...

2万+

开源分布式事务框架Seata

Seata是一个开源分布式事务解决方案,由阿里巴巴集团开发,并在2019年初开源Seata的全称是“Simple Extensible Autonomous Transaction Architecture”,即“简单可扩展自治事务架构”。它旨在提供高性能和简单易用的分布式事务服务,以解决微服务架构下服务间调用和数据操作跨多个数据库、多个服务时的事务一致性问题。Seata适用于各种需要分布式事务支持的场景,如订单系统、账务系统、秒杀系统以及基于微服务的系统等。

xuweilin的博客 1621

分布式事务Seata框架

传统的单体项目被拆分成多个微服务,一个完整的流程可能涉及到多个服务之间的调用,多个服务的入库操作,为了满足事务的ACID原则,提出了分布式事务

西敏寺的乐章的博客 2471

Seata分布式事务实践

Seata分布式事务实践

xiegongmiao的博客 1690

Seata解决分布式事务及原理过程

Seata的AT模式实现的是一个传统意义的分布式事务,以自动生成undolog的形式实现了各资源节点的两段式提交。这个方案的好处在于对现有基于MySQL, PostgreSQL和Oracle的应用可以快速实现分布式事务并且对现有代码无需大量改造,但是缺点在于整体是串行的,并且因为undolog的处理会带来额外损耗,不能解决热点资源的性能问题。Seata在每个子模块中增加undolog表, 利用节点数据库的单机事务保证子事务和补偿信息的原子性, 可以在分布式事务设计中借鉴。

qq_40051005的博客 1071
上一篇: 分布式事务探讨系列(五):saga方案
下一篇: 分布式事务探讨系列(七):一致性算法Paxos
聂鹏
博客等级 码龄19年 71粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值