Seata
文章平均质量分 95
贝克街的流浪猫
公众号: 贝贝猫技术分享
展开
-
Seata 简介
引言Seata 的前身 Fescar 刚开源的时候,就看过相关的文章和代码,代码写得很好,我还在另一个自己的项目中,借鉴了它的很多设计风格。最近想总结一篇关于分布式事务的文章,所以就想以 Seata 为中心,围绕它来细述分布式事务的点点滴滴。本文作为该系列文章的开篇,先简单地介绍一下 Seata 的背景和使用方式。背景互联网系统最初的设计一般都是单库单表,但随着业务数据规模的快速发展,数据量越来越大,单库单表逐渐成为瓶颈。所以,在这个阶段一般都会对数据库进行水平拆分,将原单库单表拆分成多个数据库分片。原创 2021-04-01 08:06:09 · 390 阅读 · 2 评论 -
Seata 设计方案
引言在深入介绍 Seata 的实现之前,我们先在一个较高的层面一览 Seata 的整体设计思想。设计方案整体架构首先,很自然的,我们可以把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本身就是一个满足 ACID 的本地事务。基于两阶段提交模式,从设计上我们可以将整体分成三个大模块,即TM、RM、TC,具体解释如下:TM(Transaction Manager):全局事务管理器,控制全原创 2021-04-01 08:06:03 · 339 阅读 · 1 评论 -
Seata Transaction Coordinator
引言前面,我们已经介绍了 Seata 的整体设计思想,接下来我们深入到其实现细节中,本文介绍 Seata 中最核心的模块 Transaction Coordinator 的实现。TCTransaction Coordinator 整体的模块图如上所示:Coordinator Core: 在最下面的模块是事务协调器核心代码,主要用来处理事务协调的逻辑,如分支的注册, commit, rollback 等协调活动。Store: 存储模块,用来将我们的数据持久化,防止重启或者宕机数据丢失。Disc原创 2021-03-31 08:56:55 · 280 阅读 · 0 评论 -
Seata Transaction Manager
引言前面,我们已经介绍了 Seata 的整体设计思想,接下来我们深入到其实现细节中,本文介绍 Seata 中 Transaction Manager 的实现。TMTM 和 TC 一样是一个共通的模块, 无论是 AT 模式还是 TCC 模式都需要使用 TM 模块。首先 TM 在启动的时候会去连接 TC Server, 然后然后通过该 TM Client 与 TC 模块进行通讯。在 TM 模块中最核心的接口就是 GlobalTransaction, 里面包含了全局事务的创建, 提交, 回滚过程, 其实质原创 2021-03-31 08:56:49 · 353 阅读 · 1 评论 -
Seata 分支事务
引言前面,我们已经介绍了 Seata 的整体设计思想,接下来我们深入到其实现细节中,本文先来介绍 Seata 中分支事务的整体实现思想。Branch Type我们已经知道在 Seata 中, 分支事务分 AT 模式和 TCC 模式, 那么, Seata 是怎么区分出 AT 模式和 TCC 模式的呢? 这也借助了 Spring 的 AOP 特性, 我们在 TM 中介绍的 GlobalTransactionalInterceptor 实际上只负责 AT 模式, TCC 模式是另一套拦截器实现, 而这两种拦原创 2021-03-31 08:56:44 · 345 阅读 · 0 评论 -
Seata AT 分支事务
引言前面,我们已经介绍了 Seata 的整体设计思想,接下来我们深入到其实现细节中,本文介绍 Seata 中 AT 模式分支事务的实现。AT 模式前面在介绍 Seata 入口时, 大家可能会注意到 GlobalTransactionScanner 中还存在一个数据源的代理:// 替换默认的数据库连接源, 改为 AT 模式的数据源代理@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName原创 2021-03-31 08:56:39 · 709 阅读 · 0 评论 -
Seata TCC 分支事务
引言前面,我们已经介绍了 Seata 的整体设计思想,接下来我们深入到其实现细节中,本文介绍 Seata 中 TCC 模式分支事务的实现。TCC 模式先简单介绍一个 Seata 中 TCC 的使用方式, 然后我们在顺着它的使用方式, 一点点深入其实现方案。在 Seata TCC 模式中, 每个 RM 都需要将 TCC 接口以 RPC 的形式暴露出去, 同时向 TC 中注册, 告诉 TC 自己是某一 TCC 接口的提供方, 这样如果发生提交或者回滚时, TC 就知道该去找谁了。然后 TM 在进行 TC原创 2021-03-31 08:56:33 · 499 阅读 · 0 评论