当前位置:网站首页>快速搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型
快速搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型
2022-08-02 14:57:00 【InfoQ】
作者:知识浅谈,CSDN签约讲师,后端领域优质创作者,阿里云技术博主,热爱分享创作
擅长领域:全栈工程师、爬虫、ACM算法
公众号:知识浅谈
联系方式vx:zsqtcc
Seata分布式事务AT、TCC、SAGA、XA模式选型总结这次都给他拿下
正菜来了
- 分布式事务

- Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。
AT模式
实现原理
阿里SEATA独有模式,通过生成反向SQL实现数据回滚,
需要在数据库额外附加UNDO_LOG表
,UNDO_LOG表中保存的是自动生成的回滚SQL。
举个
insert into 订单 values(1001,...)
update 仓储 set num = 300 where gid =100;
自动生成UNDO_LOG回滚日志
DELETE FROM 订单 where id =1001
update 仓储 set num=210 where gid = 100
特点
性能
:高
模式
:AP,存在数据不一致的中间状态
难易程度
:简单,靠SEATA自己解析反向SQL并闻滚
使用要求
:
- 所有服务与数据库必须要自己拥有管理权,因为要创建UNDO LOG表
- 最好都是MySQL,听说也支持PSQL,不过没试验过
应用场景
:
- 高并发互联网应用,允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性。
TCC模式
实现原理
TCC是Try-尝试、Confirm-确认、Cancel-取消Try尝试阶段,对资源进行锁定。Confirm确认阶段,对资源进行确认,完成操作Cancel取消阶段,对资源进行还原,取消操作。
在代码与数据表中扩展字段,实现对数据资源的锁定。


特点
性能
:好
模式
:AP,存在数据不一致的中间状态
难易程度
:复杂,SEATA TC只负责全局事务的提交与回滚指令,具体的回滚处理全靠程序员自己实现(手动写代码)
使用要求
:
- 所有服务与数据库必须要自己拥有管理权
- 支持异构数据库,可以使用不同选型实现
应用场景
:
- 高并发互联网应用,允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性。
SAGA模式
实现原理
Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

特点
性能
:不一定,取决于三方服务
模式
:AP,存在数据不一致的中间状态
难易程度
:复杂,提交与回滚流程全靠程序员编排
使用要求
:
- 在当前架构引入状态机机制,类似于工作流
- 无法保证隔离性
应用场景
:
- 需要与第三方交互时才会考虑,例如:调用支付宝支付接口->出库失败->调用支付宝退款接口
XA模式
实现原理
基于数据库的XA协议来实现2PC又称为XA方案。

特点
性能
:低
模式
:CP,强一致性
难易程度
:简单,基于数据库自带特性实现,无需改表
使用要求
:
- 使用支持XA方案的关系型数据库(主流都支持)
应用场景
:
- 金融行业,并发量不大,但数据很重要的项目
总结
Seata分布式事务AT、TCC、SAGA、XA模式选型主要是根据不同的业务进行相应的选型,如SAGA,需要调用第三方的支付的场景的时候,可以使用这个方案,SAGA是形成一定的事件流,反向的回滚的时候按照反向的事件流进行回滚。
边栏推荐
猜你喜欢
随机推荐
【Untitled】
系统延时任务及定时任务
IPtables 和binlog
CNN鲜花分类
Servlet基础详解
矩阵的特征值与特征向量
为什么我不再推荐枚举策略模式?
基于ip的证书
MySQL 行级锁(行锁、临键锁、间隙锁)
8大软件供应链攻击事件概述
PAT Class A 1019 Common Palindrome Numbers
虚拟现实处理器(SXR2130P)ISO7640FMDW(数字隔离器)说明
Getting Started with MySQL Syntax
UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 178: illegal multibyte s
c语言实现三子棋
系统存储的基本管理--挂载,分区,用户配额
DC-DC选型及电路设计
SQL查询数据以及排序
【Untitled】
基于mobileNet实现狗的品种分类(迁移学习)