分布式事务的四种解决方案,值得参考!
Posted Java技术栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式事务的四种解决方案,值得参考!相关的知识,希望对你有一定的参考价值。
Java技术栈
www.javastack.cn
分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。
例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。
一、两阶段提交(2PC)
1. 运行过程
1.1 准备阶段
1.2 提交阶段
2. 存在的问题
二、补偿事务(TCC)
Try 阶段主要是对业务系统做检测及资源预留
-
Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。 Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
-
首先在 Try 阶段,要先调用远程接口把 Smith 和 Bob 的钱给冻结起来。 -
在 Confirm 阶段,执行远程调用的转账的操作,转账成功进行解冻。 -
如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法 (Cancel)。
三、本地消息表(异步确保)
-
在分布式事务操作的一方完成写业务数据的操作之后向本地消息表发送一个消息,本地事务能保证这个消息一定会被写入本地消息表中。 -
之后将本地消息表中的消息转发到 Kafka 等消息队列中,如果转发成功则将消息从本地消息表中删除,否则继续重新转发。 -
在分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作。
优点: 一种非常经典的实现,避免了分布式事务,实现了最终一致性。
四、MQ 事务消息
优点: 实现了最终一致性,不需要依赖本地数据库事务。
来源:my.oschina.net/ruoli/blog/3102315
- END -
点击「阅读原文」和栈长学更多~
以上是关于分布式事务的四种解决方案,值得参考!的主要内容,如果未能解决你的问题,请参考以下文章