分布式事务背景分析(一)

首先我们了解一下数据库中的数据

1.数据库中的事务具有下面的属性:

1.原子性:同一个事务单元,他里面执行的sql要么全部执行成功,要么全部失败
2.一致性:完成时候,数据的状态保持一致,例如,有五个账号,每个账号有100元,相互转账,那个他的最终状态保持在总和为500元
3.隔离性:事务在高并发的情况下,不会相互影响
4.持久性:事务单元完成后,数据不会被修改

2.MySQL数据库的事务的流程

1.MySQL里面有redo,和undo两个log日志文件,确保数据日志被持久化到磁盘上,简要说明:redo是记录事务前里面的数据,undo是事务后的日志,这样的机制就确保了出现问题时很好的进行回滚
2.更新数据
3.更新数据后事务需要提交,redo进行commit

3.总结一下:我们的分布式事务也应该具有数据库事务的这行属性和行为

分布式事务

1.分布式事务产生的原因

1.分表分库
在这里插入图片描述
2.一个系统拆分为很多的子系统,每个系统都有它的垂直DB
在这里插入图片描述

分布式事务的原理基础

1.分布式事务的模型

1.X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由这个厂商进行具体的实现。
2.在J2EE里面实现分布式事务的接口定义是JTA
3…X/Open DTP 角色划分:
AP: application 应用系统
RM: resource manager 资源管理者
TM: transaction manager 事务管理者 协调应用系统加资源管理器
在这里插入图片描述

分布式事务DTA二段提交协议

如图:
在这里插入图片描述
二段提交存在的缺点:
1.当一个应用系统和TM同时挂了的时候,应用系统进行了commit,或者回滚的操作,新选举出来的TM不知道,可能存在数据不一致的情况
2.等待阻塞,TM必须等待每个子系统的反馈,才能进行下一步操作

分布式事务DTA三段提交协议

1.询问各个子系统
2.准备
3.commit

猜你喜欢

转载自blog.csdn.net/sinat_30594513/article/details/88813914