Seata四种事务模式

Seata简介

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。

Seata的三大角色

所属 三个角色
Server 服务端 TC (Transaction Coordinator) 事务协调者 维护全局和分支事务的状态,通知全局事务提交或回滚。
Client 客户端 TM (Transaction Manager) 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
Client 客户端 RM (Resource Manager) 资源管理器 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

Seata四种事务模式

1、AT 模式(默认) ,补偿型

事务回滚:通过自己建的【UNDO_LOG表】 + 【反向SQL回滚】

特点
性能
模式 AP,存在数据不一致的中间状态。
要求 数据库管理权限去创建UNDO_LOG表
应用场景 高并发互联网应用。允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性

2、TCC模式 ,补偿型

三阶段
Try 对资源进行锁定
Confirm 对资源进行确认,完成操作。
Cancel 对资源进行还原,取消操作。

原理:
在数据表中扩展字段 { 预设value,status},实现对资源的锁定。

Cancel______取消阶段
Confirm______确认阶段
Try______尝试阶段
更新失败
value = 0 , 预设value = 0, status=取消
value = 100 , 预设value = 0 , status=完成
锁定表
value = 0 , 预设value = 100 , status=初始
特点
性能
模式 AP,存在数据不一致的中间状态。
使用复杂 TC只负责通知全局事务提交和回滚,具体回滚处理需要自己实现
要求 数据库管理权限
应用场景 高并发互联网应用。允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性

3、SAGA模式 ,补偿型

长事务解决方案。
在无法干涉第三方服务的事务时使用。

原理:
逆向还原事务。
如果调用第三方接口新增数据,就得调用第三方接口还原。

Created with Raphaël 2.3.0 开始 下单购买商品 扣减商品库存 调用第三方接口支付 商品是否能出库 结束 调用第三方接口退款 yes no
特点
模式 AP,存在数据不一致的中间状态。
性能 ?,取决第三方服务
使用复杂 提交回滚流程需要定义编排
要求 引入状态机机制,类似工作流
缺点 无法保证隔离性
应用场景 调用第三方服务接口时可以使用

4、XA模式(2PC)

特点
模式 CP
性能
使用复杂 简单,无需改表
应用场景 并发量不大的重要数据

你可能感兴趣的:(JAVA,#,微服务/分布式,java,分布式)