分布式事务框架Seata

Seata(Simple Extensible Autonomous Transaction Architecture):集高性级与易用性的一种分布式事务微服务架构,其前身是 fescar,github地址:https://github.com/seata/seata

Seata有3个基本组件:

  • 事务协调器(TC):维护全局事务和分支事务的状态,驱动全局提交或回滚。
  • 事务管理器TM:定义全局事务的范围:开始全局事务,提交或回滚全局事务。
  • 资源管理器(RM):管理分支事务正在处理的资源,与TC进行对话以注册分支事务并报告分支事务的状态,并驱动分支事务的提交或回滚。

Seata管理的一个典型分布式事务过程如下:

  1. TM asks TC to begin a new global transaction. TC generates an XID representing the global transaction:TM 向 TC 申请开启一个全局事务,TC生成一个XID用于表示全局唯一的事务;
  2. XID is propagated through microservices' invoke chain:XID在微服务调用链表的上下文中进行传播;
  3. RM registers local transaction as a branch of the corresponding global transaction of XID to TC:RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖
  4. TM asks TC for committing or rollbacking the corresponding global transaction of XID: TM 向 TC 发起针对 XID 的全局提交或回滚决议。
  5. TC drives all branch transactions under the corresponding global transaction of XID to finish branch committing or rollbacking: TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

seata主要优化的思路是基于这样一个事务,一个正常运行的业务,绝大概率(95%甚至以上)都应该是成功提交的,因此在第一阶段就本地事务提交,这样可以95%以上的概率可以省去第二阶段持锁时间,当然整体就提高了效率,保证了高并发高吞吐。当然 seata使用有一个前提:RM必须支持ACID事务。

第一阶段已经commited, 第二阶段如何回滚呢?seata通过RM来保证,将业务数据在更新前后的数据镜像组织成回滚日志(RM通过XID找到对应的的undo log),利用本地事务的ACID特征实现相应的回滚,最后向TC进行回滚结果上报。

以上这种对业务无侵入的模式称为AT(Automatic Transaction),是seata的默认模式。与之相应的另一种工作模式是MT(Manual Transaction)[或者TCC],它是一种对业务有入侵的模式,commit或者rollback等操作由用户自定义,业务逻辑被分解为Prepare/Commit/Rollback3部分。

   Seata由于本地事务在第一阶段就提交了,Seata(AT模式)的默认全局隔离级别是Read Uncommitted,当然也是支持Read Committed的,如Select * from * for update。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值