我连个分布式都没干过的学前班级程序员,面个试还能被问到分布式事务。没办法,这个逼良为娼的社会呀!
学!
以后把事务、数据库那块、spring的事务、分布式事务做下整合。
一、基础理论:
1、分布式事务本质上:解决不同数据库间的数据一致性问题。
2、分布式架构基础理论
3、Base原则
CAP理论的三个原则是不能兼顾的,base算有一个这种方案吧。
二、解决方案:
1.基于两阶段提交的解决方案。
1)什么是两阶段提交-2PC/XA
流程分为两个阶段,也就是我们常说的两阶段提交,第一阶段事务管理器跟各个资源管理器(笼统认为是数据库就好)确认他们是否准备好,都确认准备好可以进行提交了,就进行第二阶段的提交。
2)实现,原生代码实现比较复杂,通常使用框架处理。
是一个基于Java事务和XA规范的一个框架。
2.基于消息的解决方案
基于两阶段提交的方案,在两个阶段处理过程中,是一直抓着资源不放的(数据库的连接等等)。所以衍生出了基于消息的分布式事务的解决方案。
1)理论部分
消息中间件的基本流程
2)解决方案
1>
先发送消息说我要做一个事务操作,正常处理业务逻辑,最后再发送确认事务操作。消息队列只有收到确认发送消息才会允许消费者消费消息。
幂等性的意思:比如说consumer收到produce的消息后,处理完业务逻辑,但是因为某种原因消息消费成功的信息没有发送给消息队列。其中是可以通过手段使其再进行一次操作。幂等性就是必须保证这次消费消息处理的结果是和上次一样的,防止出现重复消费。
2>
其实就是执行的业务操作和发送消息操作都进行本地持久化,通过定时任务检查本地数据库有没有要发送的消息,有待发送消息就将其发送给消息中间件,之后流程与前边基本类似基本是是一样的。
这个方案是不是实现最终一致性的时间太长了点????多加了一个本地持久化,再从本地持久化发消息,消费完还要再返信息处理本地消息。感觉有点二比
3>上边的变种方案,感觉更二比,又拆出来一步。
3、TCC
功能强大,但是开发维护等成本极高,难度极大。
4、LCN国内框架 玛德感
感谢公开课视频:https://www.bilibili.com/video/av51670855/?spm_id_from=333.788.videocard.0