关于分布式事务
Posted munan56
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于分布式事务相关的知识,希望对你有一定的参考价值。
最近在找工作,总是会被问到分布式事务的问题。
被问到想吐,诚实的回答我们不做分布式事务,面试官好像又不满意,我不明白现在的人为什么都那么装呢?
很多情况下出现事务的问题,很久也碰不了一次,如果出错了记录日志,定位,补偿不就完了。现在又没有强事务的分布式事务解决方案,都是弱事务,说白了就是靠代码逻辑实现最终一致。在业务代码里面夹杂着分布式事务的代码,真要出了问题,你怎么定位呢?
分布式事务的解决方案
1.XA方案也叫做两阶段提交事务方案.
主要通过增加事务协调者,对事务进行全局管理。
第一个阶段:
发出“准备”命令,所有事务参与者接受指令后进行资源准备,锁准备,undo log准备。如果都返回“准备成功”,如果不能执行,返回终止。
第二个阶段
协调者接受到第一个阶段的回复
如果都是ok,则发出“提交”命令,所有参与者进行commit操作。如果都成功,则事务结束,如果有失败情况,协调者发出“回滚”命令,所有事务参与者利用undo log进行回滚(这个在2PC不存在)。J2EE对JTA就是两阶段提交的实现。
如果有不ok,则发出撤销,所有事物撤销本地资源的锁定等操作
2.TCC方案
1 Try
对各个服务的资源做检测,对资源进行锁定或者预留
2 Confirm
在各个服务中执行实际的操作
3 Cancel
如果任何一个服务的业务方法执行出错,那么这里就需要进行补偿,即执行已操作成功的业务逻辑的回滚操作
3可靠消息最终一致性方案
实现rocketmq的事务消息
注意最好使用rocketmq的事务消息,普通消息不能保证消息可达。
4.最大努力通知行。
A执行本地事务,提交成功。调用B,b失败,再异步尝试调用B,尝试数次(次数在可接受范围内)
以上是关于关于分布式事务的主要内容,如果未能解决你的问题,请参考以下文章