关于分布式事务

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,尝试数次(次数在可接受范围内)

 

以上是关于关于分布式事务的主要内容,如果未能解决你的问题,请参考以下文章

关于分布式事务

关于微服务分布式事务

关于分布式事务的一个误解:使用了TransactionScope就一定会开启分布式事务吗?

关于分布式事务

MQ关于实现最终一致性分布式事务原理解析

关于Seata分布式事务的详细笔记,程序员吃透后,工资居然涨薪8K