基于RokectMQ实现最终一致性具体实现可参考:订单系统中的数据一致性方案及RocketMQ事务消息详解分布式事务SeataSeata 也是从两段提交演变而来的一种分布式事务解决方案,提供了 AT、TCC、SAGA 和 XA 等事务模式 。
- XA模式:强一致性分阶段事务模式 , 牺牲了一定的可用性,无业务侵入
- TCC模式:最终一致的分阶段事务模式 , 有业务侵入
- AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
- SAGA模式:长事务模式,有业务侵入
![分布式事务方案汇总及Seata详解](http://img.jiangsulong.com/231108/1H2496446-5.jpg)
文章插图
- TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚 。
- TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务 。
- RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚 。
RM一阶段的工作:
- 注册分支事务到TC
- 执行分支业务sql但不提交
- 报告执行状态到TC
- TC检测各分支事务执行状态:如果都成功,通知所有RM提交事务;如果有失败,通知所有RM回滚事务
- 接收TC指令 , 提交或回滚事务
![分布式事务方案汇总及Seata详解](http://img.jiangsulong.com/231108/1H24a438-6.jpg)
文章插图
XA模式
【XA模式实现】Seata的starter已经完成了XA模式的自动装配,实现非常简单,步骤如下:
1、修改Application.yml文件,开启XA模式:
seata: data-source-proxy-mode: XA # 开启数据源代理的XA模式
- 1.
- 2.
@GlobalTransactionalpublic Long create(Order order) {// 创建订单orderMapper.insert(order);// 扣余额 ...略// 扣减库存 ...略return order.getId();}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
阶段一RM的工作:
- 注册分支事务
- 记录undo-log(数据快照)
- 执行业务sql并提交
- 报告事务状态
- 删除undo-log即可
- 根据undo-log恢复数据到更新前
![分布式事务方案汇总及Seata详解](http://img.jiangsulong.com/231108/1H2493100-7.jpg)
文章插图
AT模式
执行流程如下:
![分布式事务方案汇总及Seata详解](http://img.jiangsulong.com/231108/1H24952B-8.jpg)
文章插图
(3)TCC模式TCC模式与AT模式非常相似 , 每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复 。需要实现三个方法:
- Try:资源的检测和预留;
- Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功 。
推荐阅读
- 婚礼会场布置策划方案 婚礼会场该怎么选择
- 聊聊接口重试机制的几种解决方案
- 彻底搞透分布式一致性
- 计划与方案的区别 计划与方案的区别是什么
- 意见和方案的区别在哪 意见和方案的区别
- 工作方案和实施方案的区别在哪 工作方案和实施方案的区别
- 使用Ray轻松进行Python分布式计算
- Go的分布式应用:使用Raft算法
- Java中的代码传递行为:解决类膨胀问题的方案
- 长江珍稀鱼类保护方案