目录
- 二、分布式事务
- 2.1 什么是分布式事务
- 2.2 分布式事务产生的背景
- 2.3 分布式事务产生的场景
- 2.4 分布式事务理论
- ==4.1 CAP理论==
- 4.2 Base理论
- 5、分布式事务的解决方案
二、分布式事务
2.1 什么是分布式事务
一组操作会产⽣多个数据库session会话 此时就会出现分布式事务
2.2 分布式事务产生的背景
1)数据库的数据量大,最终拆库拆表,把一个数据库中的数据,放到多台数据库中
⽐如: shardingSphere 再⽐如 springBoot项⽬配置多数据源等等
2)项目架构的转变
项⽬从单体架构->垂直架构->分布式架构->soa架构->微服务架构
2.3 分布式事务产生的场景
1) 跨数据库
⽐较典型的就是单体项⽬数据层进⾏拆库拆表,或者单体项⽬多数据源的情况
2)跨进程
⽐如多个服务访问的是同⼀个数据库 这种情况下 很少⻅ 但是照样会出现分布式事务
3)跨jvm进程,跨数据库
比较典型的就是微服务项目,一个事务的执行需要牵扯到多个服务,每个服务又有自己的数据库,跨项⽬ ⼜ 跨数据库
【总结】
不管是跨进程,还是跨数据库,还是多服务访问单数据库,都有一个本质的特点,操作时可能存在多个session会话,我们可以理解为如果一组操作会产⽣多个数据库session会话 此时就会出现分布式事务
2.4 分布式事务理论
4.1 CAP理论
CAP理论指:分布式事务中,不能同时满足一致性,可用性,分区容忍性
- C:表示⼀致性(Consistency)
- A : 表示可⽤性(Availability)
- P:表示分区容忍性(Partition Tolerance)
一致性:一致性表示用户对数据的修改操作,在所有的副本中,要么全部执行成功,要么全部执行失败。(强调的是数据必须一致,允许锁等待和超时)
(⽐如: mysql的主从复制读写分离时,当对主库添加数据成功时 从库必须也添加成功 并且从从库中读取数据时读取的应该是最新的数据 不能出现主库添加数据后 从从库中读取的不是最新的数据⽐如在主从复制过程中读取从库 此时数据还没有复制过来 此时读取的可能就不是最新的数据 此时就不满⾜⼀致性了所以想要满⾜⼀致性 当主库添加数据时 需要把数据同步到从库 并且同步的时候需要锁定从库,不能让从库参与读取,等到同步完成之后再取消锁定 此时再读就是最新的数据了 此时就满⾜了⼀
致性)
可⽤性:表示数据库节点可⽤即可,即客户端访问数据的时候 不存在超时 错误响应 能够快速响应结果。此时节点中的数据可以⼀致 也可以不⼀致,可⽤性的关注点就是系统可⽤,访问时可以快速给响应即可。
(⽐如 mysql的读写分离 当对主机添加数据时,从机会复制这条数据 当客户端读取从机时 不能超
时报错必须得有响应。此时允许读取的数据不是最新的。从机还不能被锁定。)
分区容忍性:表示把存储系统部署在多个节点中,并且这些节点在不同的⽹络节点中,这就形成了⽹络分区,由于⽹络问题节点之间的通讯可能失败,分区容忍性表示 就算节点通讯失败 照样能对外提供服务
【总结】一致性和可用性是矛盾的
4.2 Base理论
对 cap中的ap模式做客一个拓展,它牺牲了一致性,换来可用性
在base理论中 强调了三点:
1)基本可用
是指在分布式系统中 如果出现故障,允许系统损失部分功能,但是要保证系统基本可⽤ ⽽不是整个系统死掉(⽐如我们购买⽕⻋票时 下订单经常出错 当下订单功能出错时 我们还可⽤正常查询⻋票 ⽽不是整个12306瘫痪)
2)软状态
软状态指允许系统存在中间状态,中间状态不会影响系统的整体可⽤性,允许系统各个节点中数据同步延迟。
3)最终一致性
最终⼀致性表示 允许分布式系统中各个节点的数据存在不⼀致的情况 但是经过⼀段时间,各
个节点上的数据 最终还是⼀致的。
5、分布式事务的解决方案
强⼀致性 cp:XA协议(数据库级别的规范,需要数据库的支持)
弱⼀致性 ap
- TCC
- 可靠消息⼀致性
- 其他⽅式