Seata的一些知识一

【微服务】(十六)—— 分布式事务Seata_seata group_机智兵的博客-CSDN博客

第一个知识点  数据库事务ACID特性

A(Atomic):原子性

C(Consistency):一致性

I(Isolation):隔离性  

D(Durability):持久性 持久到数据库中

第二个知识点 什么是分布式事务

分布式事务指事务的参与者,支持事务的服务器,资源服务器以及事务管理器分别位于不同分布式系统的不同节点之上。

第三个知识点 分布式事务的典型场景

多服务  一起成功或者一起是失败,保证数据一致性

Seata的一些知识一_第1张图片

多数据源----跨库

Seata的一些知识一_第2张图片

多数据源----分库分表

Seata的一些知识一_第3张图片

11251126

第四个知识点 分布式事务基础理论

CAP定律

C一致性  3个节点,一个节点更新,另外两个节点的数据应该一起更新

A可用性  合理的时间返回合理的响应

P分区容错性   网络原因,网络断开,保证一部分出错,另一部分还能工作

要么AP 要么CP  C和A相互冲突

BASE理论

Basically Available(基本可用)

soft state(软状态)  允许中间状态存在,但是是最终一致的

Eventually Consistent(最终一致性)

酸碱平衡

Seata的一些知识一_第4张图片

第四个知识点 分布式事务协议

2PC

Seata的一些知识一_第5张图片

优点:尽量保证了数据的强一致性,实现成本较低,在主流数据库都有自己实现,对于MYSQL是从5.5开始支持(XA)。

缺点:单点问题 同步阻塞 数据不一致

3PC

11251237

Seata的一些知识一_第6张图片

优点:引入超时机制 多了一次询问阶段

缺点:

  • 3PC用超时机制,同步阻塞问题,但多了一次网络通信,性能更差,不推荐
  • 没有解决数据不一致的问题

第五个知识点 Seata介绍

Seata的一些知识一_第7张图片

问:什么是无侵入?什么是自动补偿?

问:什么是长事务?

注意:分布式事务能不用尽量不要用,引入了会引入很多相关的问题

第七个知识点 Seata术语

事务管理器 Transaction Manager 开启事务,提交事务

Seata的一些知识一_第8张图片

问:没懂TC存在的意义,RM直接与TM通信不行么?

11251531

TM开启一个事务,创建一个事务ID,XID是分布式事务的唯一标识,

每个小服务会注册一个分支事务

第八个知识点 Seata简单部署

配置项 配置内容
registry.conf 配置服务端注册中心和配置中心相关信息
file.conf registry.type=file或者config.type=file时会用到
store.mode=db 需要三张表:global_table.branch_table.lock_table

Server端存储模式(store.mode)支持三种:

-file:单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高

-db:高可用模式,全局事务会话信息通过db共享,相应性能差些

-redis:Seata-Server1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置

第一步  从官网下载源码 解压 

第二步 创建数据库

Seata的一些知识一_第9张图片

第三步 修改file.conf

第四步 启动

第九个知识点 多数据源分布式事务

DataSourceProxyConfig 数据库代理配置

Seata的一些知识一_第10张图片

数据源的集合dataSourceMap

Seata的一些知识一_第11张图片

DynamicDataSourceContextHolder

Seata的一些知识一_第12张图片

DynamicRoutingDataSource

Seata的一些知识一_第13张图片

11252217

用分布式事务解决

第十个知识点 Seata接入微服务应用

第一步 修改registry.conf  

注册中心 type="nacos"

配置中心也用nacos

Nacos配置Seata的信息 

Seata的一些知识一_第14张图片

Seata的一些知识一_第15张图片

11261622

XA模式 TCC模式 Saga模式 AT模式

1.XA模式

XA协议是什么?

Seata的一些知识一_第16张图片

Seata的一些知识一_第17张图片

Seata的一些知识一_第18张图片

MYSQL对XA协议的实现  

意思就是 可以在MYSQL里边,用XA的那几个命令

Seata的一些知识一_第19张图片

Seata的一些知识一_第20张图片

Seata XA

问这是在干什么?

seata实现分布式事务 XA是个协议

问:XA是个怎样的协议 是干什么用的?

【微服务】(十六)—— 分布式事务Seata_seata group_机智兵的博客-CSDN博客

问:实现XA模式和不实现XA模式有什么区别?内容不变只是格式发生了变化??

2.TCC模式  另外一种实现这个功能的方法

Seata的一些知识一_第21张图片

理解:

Seata的一些知识一_第22张图片

Seata的一些知识一_第23张图片

3.saga模式

Seata的一些知识一_第24张图片

Seata的一些知识一_第25张图片

Seata的一些知识一_第26张图片

问:构建一个微服务系统需要安装多少软件啊

问:淘宝 这个功能的实现 

11261720

问:Seata安装在哪个电脑上?和什么软件组合安装在一起?

11270951

DataSourceProxy 解析SQL语义→提取表元信息→获取前置镜像beforemage→执行业务SQL→获取后置对象aftermage→生成undolog信息并缓存→注册分支事务→undo_log

问:生成这个镜像不会很耗费资源么?不会,不需要回滚时,会直接删除

DataSourceProxy 解析SQL语义→提取表元信息→获取前置镜像beforemage→执行业务SQL→获取后置对象aftermage→生成undolog信息并缓存→注册分支事务→undo_log

用前置镜像进行回滚

注册分支事务时增加一个这条数据的全局锁row_key,这样这条数据就不能被其他人修改

111271141

Seata的一些知识一_第27张图片

init TM 

init RM

Seata的一些知识一_第28张图片

Seata的一些知识一_第29张图片

Seata的一些知识一_第30张图片

TM RM

Seata的一些知识一_第31张图片

有个类 GlobalTransactionallinterceptor.java  叫全局事务拦截器

会调用invoke方法

Seata的一些知识一_第32张图片Seata的一些知识一_第33张图片execute

Seata的一些知识一_第34张图片

在execute方法中

Seata的一些知识一_第35张图片

核心的核心

//2.开启事务

beginTransaction(txInfo,tx);

Object rs =null;

try{

//3.执行业务逻辑

rs = business.execute();

}catch (Throwable ex){

//5.回滚事务

completeTransactionAfterThrowing(txInfo,tx,ex);

throw ex;

}

//4.提交事务

commitTransaction(tx);

return rs;

}finally{

//6.清理缓存信息

triggerAfterCompletion();

cleanUp();

}

问:为啥变量名取XID,不取Gid,hhhhhh

Seata的一些知识一_第36张图片

问:为啥函数的功能要分的这么细啊,像这种非常核心的,直接写成一个方法,不就好了,看不透啊

Seata的一些知识一_第37张图片

11271230

执行业务逻辑

Seata的一些知识一_第38张图片

Seata的一些知识一_第39张图片

回滚事务

Seata的一些知识一_第40张图片

11271301

调用doBranchRegister方法中调用setBranchId方法中调用branchRegister

Seata的一些知识一_第41张图片

Seata的一些知识一_第42张图片

创建分支事务

Seata的一些知识一_第43张图片

行锁收集 List

Seata的一些知识一_第44张图片

全局事务添加 全局事务更新 全局事务移除 添加分支事务

返回分支事务ID

Seata的一些知识一_第45张图片

11271317

commit提交

11271431

Seata的一些知识一_第46张图片

TransactionTemplate.java

Seata的一些知识一_第47张图片

一个接口GlobalTransaction.java 里的方法 commit()

Seata的一些知识一_第48张图片

接口GlobalTransaction.java的实现类DefaultGlobalTransaction.java里边重写了commit方法

在这个方法中执行,成功还是失败,都会重试5次

Seata的一些知识一_第49张图片

调用TransactionManager的commit方法

Seata的一些知识一_第50张图片

syncCall

Seata的一些知识一_第51张图片

同一个类 第103行 使用netty发送请求TmNettyRemotingClient

Seata的一些知识一_第52张图片

DefaultCoordinator.java类里面的doGlobalCommit

Seata的一些知识一_第53张图片

asyncCommit

Seata的一些知识一_第54张图片

changeStatus

Seata的一些知识一_第55张图片

onStatusChange方法

Seata的一些知识一_第56张图片

你可能感兴趣的:(java)