分布式事务

本文探讨了分布式系统中的CAP理论,强调一致性、可用性和分区容错性之间的平衡。接着介绍了BASE理论如何处理不可兼得的问题,以及两阶段提交(如XA和Seata)在事务管理中的应用,包括全局锁的作用和性能影响。最后提到了TCC模式的Try-Commit-Cancel逻辑。
摘要由CSDN通过智能技术生成

CAP理论:

CAP是指在分布式系统下,系统包含C、A、P三个要素,并且三者不可兼得
C:一致性:同一个数据在同一时刻是相同的
A:可用性:即系统出错误,但在一定时间范围内仍能够正确的响应用户请求
P:分区容错性:即某节点或网络分区故障时,系统乃能够提供满足一致性和可用性的服务。
三者只能是CP(强一致性)或者AP(高可用性)

BASE理论:

BASE理论为CAP理论的延伸,主要是解决CAP理论中分布式系统的可用性和一致性不可兼得的问题
1.基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。
2.软状态:允许系统中存在中间状态,这个状态不影响系统可用性,这里指的是CAP中的不一致。
3.最终一致:最终一致是指经过一段时间后,所有节点数据都将会达到一致 
BASE和ACID是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

XA:
两阶段提交的思想
一阶段:执行各个本地事务,但不提交
二阶段:提交各个本地事务
缺点:
1、网络分区导致的数据不一致问题:例如A、B两个本地事务,二阶段时一个提交成功,一个由于网络原因提交失败,解决方案:可设置统一的提交或者回滚,或者感知到异常做兜底业务处理
2、单点故障问题:各个本地事务的提交和回滚全部由XA的server端控制,server端一旦宕机各个本地事务都会处于阻塞状态,解决方案:做集群,但集群只能保证重新选出新的server端控制者,本地事务阻塞的问题是无法解决的
3、同步阻塞问题:各个事务在未提交时属于阻塞状态,其他事务想要操作行数据只能等待
由各个可能会出现的问题衍生出三阶段提交

三阶段提交
一阶段:测试网络通信,及各个本地事务是否能够进行事务操作
二阶段:执行各个本地事务,但不提交
三阶段:提交各个本地事务

Seata
AT模式
一阶段:
1、向seata server端申请全局事务id,传递给下游参与服务
执行各个本地事务,在事务执行前后记录seata自己的undolog/image(用于回滚)到表中,该表为根据官网手动创建
2、各个本地事务申请全局锁
3、申请成功提交本地事务
二阶段:提交分布式事务,释放全局锁,删除对应的undolog/image

问题
1、全局锁的作用:基于锁的原理,对于同一个行数据,一个时刻只能有一个分布式事务执行,提供互斥的作用
2、本地事务为什么在第一阶段提交:为了提高性能,AT模式基于2PC的,但2PC的一阶段并不会真正提交本地事务,也就意味着一直持有资源不释放,
性能较差,但AT模式在一阶段提交了本地事务,其他本地事务就可以执行,但全局锁还没有释放,同时还有undolog image的记录,来保证后续有异常仍然能够进行事务回滚,提高性能
3、为什么全局锁不在本地事务开始时直接加锁:为了提高性能,减少全局锁对数据库的占用时间
4、AT模式的隔离级别:读未提交,因为当一阶段本地事务提交之后,其他的分布式事务已经可以看到提交后的数据,但因为有全局锁的存在,此时全局锁还没有释放,只能读到数据不能写数据
5、全局锁带来的性能问题:因为有全局的存在,所有的分布式事务只能串行执行,不能并发的操作数据库中的数据

分支事务提交后,遇到异常回滚时,其他的本地事务修改了数据,此时seata会默认抛出异常

TCC模式
TCC事务是Try、Commit、Cancel三种指令的缩写,其逻辑模式类似于XA两阶段提交,但是实现方式是在代码层面来人为实现。

参考文章:https://blog.51cto.com/u_15127651/4378101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值