Seata-AT 搭建的坑和模块分析

Gitee 地址: gitee.com/dpyuyu/seat…
介Git介绍: 此项目是官网文档pull 该篇文章我们将梳理一下搭建的过程和遇到的坑的问题 ;

我搭建遇到的坑:

从官网拉取项目-或者从我的gitee 直接拉取项目,该项目里面有一个不是很全的搭建教程
坑1: 官网给我的数据库我链接不上,我只能从官网拿sq自己搞了一个数据库- 我这个项目也是我自己的数据库短时间不会删除
坑2: 如果不去官网拿全局事务表和局部事务表,你seata 启动就会闪退,而且没有提示信息
坑3: 因为会去找全局事务id和局部事务id,如果你想要在数据库里面看,那么请修改region里面的config 配置信息为file 并且将file的配置文件修改为你的数据库,不然你是看不到的
坑3扩展: 如果你配置region文件的config选项为zk ,请去zk里面找全局事务xid 次数数据库里面是没有的
坑4: 这个项目创建creata是GET方法 传对象,请按照正常的?id=1 这种方式进行传参即可

region文件配置的分析:

我们知道,Region文件里面有一个 region的选项,和config选项
region 是注册中心的意思
config 是配置中心的意思

config -

会在config配置指定的地方生成全局事务id 和分支事务id 可以放置在zk db redis 等(redis seata:1.3+)

贴了一个全局的事务的消息样式 image.png

region -

一: 其实注册中心的作用是 Client 请求Seata server 服务端拿Xid 使用的是Rpc调用 事务分组和seata 注册到Naocs上边的事务分组一样 直接拿那个然后rpc调用Default 就是Seata server 注册到Eurake上的服务名称,然后将全局xid存储DB然后返回给调用对象
二: xid是会传递的 在使用了注册中心后,在同一个事务里面调用其他Feign的服务,会将xid传递给其他服务,并且会在branch_table 表里面存储分支事务
三:无论失败或者成功这个事务id 都会被删除, 失败就拿sql进行回滚,否则就不用

然后下面有对应的Debug 图解这

这个Default 就是Seata 的服务 image.png

//这个在获取xid 的过程发送的Rpc 请求 image.png //这里是上锁- 如果拿到xid 那就上锁通知所有人
image.png

file配置文件 说明

上图-清晰明了-如果配置中心指定到-file 就会指到这个file文件 image.png

这个就只指定-我的xid 获取之后写入到哪里- 然后回存储全局事务id 和分支事务id image.png

过程模型

两阶段提交协议的演变:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

  • 二阶段:

    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿。

注意:Seata 有低级的读隔离和写隔离 - 基本上使用的策略都是 同步获取等待策略,超时回滚

读写隔离

seata.io/zh-cn/docs/…

Seata术语

TC- 对应服务器Seata Server

TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

高可用

水平扩展 ,需要依赖 注册中心 配置中心 DB/ZK/REDIS

Guess you like

Origin juejin.im/post/7068200088379588645