其他分享
首页 > 其他分享> > 百万架构师核心技术设计实践——分布式事务设计

百万架构师核心技术设计实践——分布式事务设计

作者:互联网

一、出现分布式事务的原因:

二、分布式事务分类:

刚性分布式事务:强一致性(cp)

柔性分布式事务(使用多):最终一致性(ap,补偿/通知)

三、六大事务模型:

刚性事务模型:xa,2pc(两阶段提交又称2PC(two-phase commit protocol))
柔性事务模型:补偿类2(TCC、saga),通知类2(事务消息、最大努力通知事务)
注:saga与事务通知重点介绍

四、刚性分布式事务:

提到刚性分布式事务,首先想到的是2pc,在2pc之前首先应了解XA模型,刚性事务满足传统事务的ACID(ACID介绍: 传送门
柔性事务对ACID的CI进行了取舍,刚性分布式事务由于性能差,在实际应用中使用很少,除非是对事务要求极为苛刻的金融公司,如蚂蚁金服大量使用2pc

五、XA模型(只是标准,无具体实现):

XA模型仅仅是定义了规范,使用的时候需要各个厂自己实现。目前XA具有很大性能问题,几乎没人用。 且只能用XA事务连接池,不能用jdbc
1.XA由AP、RM、TM组成:
在这里插入图片描述

六、2PC(XA模型的实现 two-phase commit protocol):

基于xa模式的2pc实现时序图:
在这里插入图片描述
两阶段提交2PC是XA模型的实现,AP发起commit请求,TM发起prepare投票,RM进行串行投票,都同意后,TM再commit,如果commit过程出现宕机等异常,节点服务重启后,根据XA recover再次进行commit补偿。

缺点(响应延时高、并发低):

七、3PC(there-phase commit protocol):

3pc是2pc的优化,不是严格的XA规范,解决脑裂引起的事务状态不确定问题,引入了超时和对齐(根据上次的结果,默认执行)的概念。如TM约定,5秒后提交事务,等待5秒,然后提交事务,如果存在未收到状态的RM,默认对齐。sql层面是,01解析sql,02记undo/redo,03提交事务。3pc比2pc多引入一个阶段,仅仅解决的是2pc因脑裂带来的事务状态丢失的问题(这是小缺陷),对于2pc的大缺陷(同步、并发低)一个也没解决,2pc还有很少的人用,3pc几乎根本没人用。

八、柔性分布式事务:

刚性分布式事务由于性能差(高延时、低吞吐量),在实际应用中使用很少,除非是对事务要求极为苛刻的金融公司,如蚂蚁金服大量使用2pc,在互联网高并发的要求下,2pc这类的刚性分布式事务根本无法满足我们的需求,因此出现的如TCC、saga类的柔性分布式事务。刚性事务在业内估计占有10%-20%
柔性分布式事务是对XA的妥协,降低对一致性的要求,从而降低数据库资源(RM)的锁定时间,提高性能。cap选取ap柔性分布式事务,而柔性分布式事务的落地理论就是base理论。base理论传送门

九、TCC(try-confirm-cancel)模型:

理论神器、初学者天堂、实践废物,对业务侵入性很大。TCC07年提出,09年引入国内
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

九、saga模型:

tcc是三步,首先try如果失败就回滚;saga是两步,直接execute,正常就结束了,异常就调用补偿模块,补偿模块可能复用(巨大的优化);saga也是串行化的?saga的串行与xa模式的串行不一样,saga的每个本地事务执行后都会提交,xa模式每个本地事务执行后不会提交,而是挂起。

saga的隔离性:

saga的补偿模块:

saga的问题:

tcc与saga的cancal与补偿可以异步,fastfail,三次补偿失败就上人工智能(人)

十、刚性分布式事务与柔性分布式事务比较:

在这里插入图片描述

十一、遇到分布式事务的解决思路与方案:

十二、事务消息:

事务消息是柔性分布式事务,通知型
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

缺点:

优化:引入本地事务消息表,可解决发送端的原子性问题。将消息插入本地表,定时任务投递mq

在这里插入图片描述

十三、同步场景实现分布式事务设计:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补偿方法不一定写,curd,c与d对立,直接由,只需要写u操作,且bas为数据处理层,不涉及业务,可以写通用的(如果标注了补偿方法,就走个性的补偿方法,没有标注的就走通用的补偿方法)

十四、更优雅的补偿方案——seata-AT模式:

seata-AT模式也是saga的一种实现:自动补偿:
写操作前,生成前置镜像
写操作
写操作前,生成后置镜像;如果补偿,对比前后镜像,进行补偿

十五、saga开源方案:

tcc也有开源方案,但是实现成本太大,不推荐使用,如seata tcc模式,bytetcc
在这里插入图片描述service comb是华为的一套微服务解决方案,不是独立的模块,如果使用需要使用全套的微服务解决方案。使用的是saga aop实现

seata是阿里的产品,支持AT、saga、tcc、xa模式,语言上支持java支持go;而且支持全局锁,解决事务隔离的问题

seata的清铭(肖宇)为了制定标准,给saga对着干

在这里插入图片描述

Hmily是个人产品

标签:事务,saga,XA,补偿,2pc,设计,架构师,分布式
来源: https://blog.csdn.net/qq_38837032/article/details/122259373