Seata 介绍

本文介绍了Seata分布式事务处理框架,包括其架构组件、主要模式(XA、AT、TCC和SAGA)、以及各自的特点和优缺点。重点比较了XA模式的一阶段锁定和AT模式的性能优化。
摘要由CSDN通过智能技术生成

1.Seata 介绍

官⽹地址:http://seata.io/,其中的⽂档、播客中提供了⼤量的使⽤说明、源码分析。

2.Seata架构

2.1.Seata中有三个重要组成部分

  • TC(Transcation Coordinator)事务协调者
    维护全局事务和分支事务,管理分支事务的提交或回滚;
  • TM(Transcation Manager)事务管理者
    定义全局事务的范围,管理全局事务的开启、提交、回滚;
  • RM(Resource Manager)资源管理者
    管理分支事务处理的资源,通过协调者注册分支事务,并报告事务状态,管理分支事务的提交、回滚;

2.2.Seata中不同的模式

  • XA模式
    强一致性的分段事务,牺牲一定的可用性,无业务入侵
  • AT模式
    最终一致的分段式事务,无业务入侵,Seata默认的模式
  • TCC模式
    最终一直的分段式事务,会有业务入侵
  • SAGA模式
    长事务模式,有业务入侵

3.模式介绍

3.1 XA模式

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接⼝,⼏乎所有主流的数据库都对 XA 规范提供了⽀持。XA 模式通过两阶段的提交实现。

一阶段:

  • 事务协调器通知各个分支事务执行本地事务;
  • 分支事务执行完后,不进行事务提交,继续持有数据库锁;

二阶段:

  • 由事务协调器判断最终事务是否要提交;
    • 所有的分支事务都执行成功,通知所有分支事务,提交事务;
    • 如果有一个分支事务执行失败,通知所有的事务回滚事务;
3.1.1.Seata的XA模式

Seata 的 XA 模式对标准的 XA 模式做了一定的封装和改造。

RM一阶段:

  • 注册分支事务到 TC
  • 执行分支事务 sql,不提交事务
  • 提交事务执行状态到 TC

TC二阶段:

  • TC检测各分支事务状态
  • 如果全部成功,通知所有的 RM 提交事务
  • 如果有失败的事务,通知多有的 RM 回滚事务

RM二阶段:

  • 接收 TC 指令,提交事务或者回滚
3.1.2优缺点

优点:

  • 事务强一致性,满足ACID原则
  • 常用的数据库都支持,实现简单,没有代码入侵

缺点:

  • 一阶段需要锁定数据库资源,二阶段结束后才会释放,性能较差
  • 依赖与关系型数据库

3.2.AT模式

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过⻓的缺陷。

RM一阶段:

  • 注册分支事务
  • 记录 undo-log(数据快照)
  • 执行sql并提交
  • 报告事务状态

RM二阶段:

  • TC判断所有分支事务执行成功,删除 undo-log
  • TC判断有分支事务直观性失败,通过 undo-log 将数据恢复
3.2.1.优缺点

优点:

  • 一阶段完直接提交事务,释放数据库锁,性能好;
  • 利用全局锁实现读写隔离;
  • 没有代码入侵,框架自动完成回滚和提交

缺点:

  • 两个阶段之间属于软状态,最终一致
  • 框架的快照功能会影响性能,但是比 XA 模式要好

4. AT 与 XA 的区别

  • XA 模式一阶段不提交事务,锁定资源,AT 模式提交事务,不锁定资源;
  • XA 模式依赖数据库做回滚,AT 依赖数据快照做回滚;
  • XA模式为强一致,AT模式为最终一致;

5.AT模式脏写问题

可以在提交事务前,获取一个全局锁,提交事务后释放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值