Seata(分布式事务/四大模式)
2021-03-11 18:45:54 3 举报
AI智能生成
Seata(分布式事务/四大模式)
作者其他创作
大纲/内容
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务
1+3套件
1 个 ID
全局唯一的事务 ID:Transaction ID(xid)
3个组件
TC:事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚
TM:事务管理器
负责开启一个全局事务,提交或回滚全局事务
RM:资源管理器
管理分支事务处理的资源,向TC报告状态,提交或回滚分支事务
处理过程
1、TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID
2、RM向TC注册分支事务,将其纳入XID对应全局事务的管辖
3、TM向TC发起全局事务的提交或回滚决议,TC汇总信息做进一步判断
4、TC通知所有RM提交或回滚事务
2、RM向TC注册分支事务,将其纳入XID对应全局事务的管辖
3、TM向TC发起全局事务的提交或回滚决议,TC汇总信息做进一步判断
4、TC通知所有RM提交或回滚事务
需要Seata库
branch_table
分支事务表
global_table
全局事务表
lock_table
锁表(将相关数据行进行锁定)
四大模式
AT模式
(强一致性)
(强一致性)
概念:提供无侵入自动补偿的事务机制,目前已支持MySQL和Oracle
使用
每个服务必须要创建undo_log表
安装事务协调器:seata-server
一阶段加载
Seata会拦截SQL,分析SQL涉及到的业务数据,在数据被更新前先保存 before image
执行业务SQL更新数据,在业务数据更新后,保存一份 after image,最后生成行锁
二阶段提交
如果二阶段是顺利提交的话,只需将一阶段中保存的快照和行锁删掉即可
二阶段回滚
如果二阶段需回滚,则先将当前数据和 after image 进行对比看是否有脏写,有
的话需要人工处理,没有脏写则通过 before image 生成逆向SQL来还原数据
的话需要人工处理,没有脏写则通过 before image 生成逆向SQL来还原数据
删除中间数据(before image、after image、行锁)
TCC模式
概念:支持TCC模式并且可与AT混用,灵活度更高
要实现三个接口,对代码有侵入性
SAGA模式
(弱一致性)
(弱一致性)
概念:为长事务提供有效的解决方案
XA模式
概念:支持已实现XA接口的数据库的XA模式
配置
先备份原始file.conf文件,主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息
自定义事务组的名称(service模块)
vgroup_mapping.my_test_tx_group = "seata-server"
事务日志存储模式(store模块)
从file改为db,即 mode="db"
db块内修改数据库连接
指定 url、user、password
数据库创建seata库,创建3张表(全局表、分支表、锁表)在每个需要全局事务的库下新建undo_log表
0 条评论
下一页