Seata: Simple Extensible Autonomous Transaction Architecture
Seata:简单可扩展的自主事务架构
本文来自于:https://github.com/seata/seata
Seata有不错的中文文档,不过,其github主页上的简介并没有中文版。翻译下,也为自己做个备忘
目录
一、Seata是什么?
Seata是分布式事务解决方案,它拥有较高性能,且在微服务架构下易于使用
二、微服务中的 分布式事务问题
假设我们有一个传统的单体(monolithic)应用,其业务有3个模块组成,这3个模块使用单一一个本地数据源。
很自然的,本地事务(local transaction)保证了数据一致性。
在微服务架构下,事情就不一样啦。在微服务架构下,前面提到的3个模块被设计成3个服务,每个服务都建立在自己独有的数据源上(微服务模式:每个服务一个数据库)。对于每个服务本身,数据一致性依然还是由本地事务保证
三、但,在 整个业务逻辑范围内,如何保证 数据一致性
四、Seata怎么做的?
Seata正是为上述问题而生的解决方案
首先,如何定义 分布式事务?
分布式事务(distributed transaction) 是 由一批 分支事务(branch transaction)构成的 全局事务(global transaction),通常,分支事务就是普通的本地事务(local transaction)
Seata中有3个基本组件:
事务管理者(TM, transaction manager):定义全局事务的范围:开启全局事务、commit或rollback全局事务
事务协调者(TC, transaction coordinator):维护全局事务和分支事务的状态,驱动 全局事务commit或rollback
资源管理者(RM, resource manager):管理 分支事务所用到的 资源。向TC注册分支事务,向TC汇报分支事务的状态,驱动 分支事务commit或rollback
Seata管理的分布式事务的典型生命周期如下:
- TM 要求 TC 开启全局事务。TC生成代表着全局事务的 XID
- XID 在 微服务的调用链中 被传播
- RM 向 TC 进行注册,将 本地事务 注册为 全局事务XID 的分支事务
- TM 要求 TC commit或rollback 全局事务XID
- TC 驱动 全局事务XID下的每一个分支事务,让每一个分支事务 完成自己的 commit或rollback
更多Seata设计原理和细节,请参照Seata wiki page:https://github.com/seata/seata/wiki
五、Seata的历史
1. 蚂蚁金服(Ant Financial)
- XTS:扩展事务服务(Extended Transaction Service)。从2007年开始,蚂蚁金服中间件团队开发了 分布式事务中间件,该中间件在蚂蚁金服被广泛使用,解决了 跨数据库和跨服务 的数据一致性问题
- DTX:分布式事务扩展(Distributed Transaction Extended)。从2013年开始,XTS更名为DTX 并在 蚂蚁金服云 发布
2. 阿里巴巴(Alibaba)
- TXC:淘宝事务构建器(Taobao Transaction Constructor)。从2014年开始,为了解决 从单体应用架构(monolithic)向微服务应用架构 转变所带来的 分布式事务问题,阿里巴巴中间件团队开始了该项目
- GTS:全局事务服务(Global Transaction Service)。从2016年开始,TXC更名为GTS,作为阿里云中间件产品发布
- Fescar:为了后续可以和社区更紧密合作,从2019年开始,基于TXC/GTS我们发布了开源项目Fescar
3. Seata社区(Seata Community)
Seata:简单可扩展的自主事务架构(Simple Extensible Autonomous Transaction Architecture)。蚂蚁金服加入了Fescar,这使得Fescar成为 分布式事务 的更中立和开放的社区,Fescar被命名为Seata
Enjoy