读书

阿里巴巴Seata微服务下的分布式事务TCC架构设计原理

2022-06-16  本文已影响0人  Java七七

在信息时代的网络环境下,如何保证业务数据的正确性,成为重要的核心点,而数据库产品在业务数据中提供了一套完整的策略机制(原子性,一致性,隔离性,持久性),业务程序不管与数据库是单次单表交互(程序数据与数据表可能构成一个业务的原子性)还是多次多表交互(业务数据分散在多表中通过多次协议交换),事务充当了业务数据完整性很重要的角色。

本地事务 :大部分数据库自身携带事务特征,业务不需要切入业务事务的保障。

分布式事务 :各自的数据库只能保证本库的表事务,而涉及多库之间的业务数据表一致,显得难以控制实现极其复杂,如果以各自的数据库事务为基础,在此基础上构建一套事务协调系统,那么分布式数据源事务控制就变得特别简单。

Seata事务模式架构

Seata 定义了全局事务的框架。全局事务 定义为若干 分支事务 的整体协调:

image.png

Seata 的全局事务处理过程,分为两个阶段:

不同的事务模式区别在于:分支事务使用不同的事务模型方式达到全局事务两个阶段。

TCC 模式

一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:

image.png

TCC模型执行阶段:

调用业务阶段:

完成阶段:

Seata TCC 模型实现架构图

image.png

用户接入TCC,最重要的是考虑如何将自己的业务模型拆成两阶段来实现。 例如:

框架核心类

备注: 用户接入 TCC 模式,相对于 AT 模式,TCC 模式对业务代码有一定的侵入性,但是 TCC 模式无 AT 模式的全局行锁,TCC 性能会比 AT 模式高很多

Seata TCC 架构与对应数据表之间的关系

如下图表中的数据变化对应TCC业务类三个方法对应的处理状态。

image.png

Seata TCC 模型,TM客户端&RM客户端 与TC 通信架构原理图

如下图涉及了RM、TM、TC之间内部通信核心原理,属于Seata TCC核心架构实现

image.png

至于内部实现细节代码,梦塔后续跟大家“弹弹”,时间不早,你的点赞就是对我最好的支持与动力。

上一篇 下一篇

猜你喜欢

热点阅读