seata框架

Seata是一个开源的分布式事务管理工具,介绍了TC、TM和RM角色。AT模式利用undo-log实现事务回滚,局限于MySQL;而TCC模式强调异常处理,包括Try/Cancel/Confirm操作及其解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Seata简介:(Seata | Seata(官方网站))

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

相关术语:

TC (Transaction Coordinator) - 事务协调者

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

TM (Transaction Manager) - 事务管理器

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

RM (Resource Manager) - 资源管理器

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

分类:

AT模式:

该模式下数据库中有undo-log表来记录每次修改操作。若执行完成,未发生异常,则直接清空undo-log表,并提交全局事务。否则通过undo-log表来进行回滚操作。

局限性:由于回滚操作依赖于undo-log表,所以只能在mysql数据库中使用,其他数据库就只能采用TCC模式。

undo-log.sql文件(官网摘取) 

-- 注意此处0.7.0+ 增加字段 context
CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

TCC模式:

TCC异常情况:
1:未执行try,直接执行cancel操作。

原因:Try超时导致还未执行发生异常执行cancel操作。

解决:增加事务日志表,若TYR执行完成,在日志表里插入一条记录,可以执行cancel操作,否则执行空回滚操作。

2:幂等(多次执行confirm,cancel操作)

原因: 网络原因,服务宕机

解决:做幂等性操作,在事务日志表中增加一个字段用来记录操作状态(初始化,已提交,已回滚),根据状态执行对应操作。

3:防悬挂(未执行完TRY,执行cancel操作)

原因:TRY执行中超时导致发生异常

解决:执行cancel时添加事务日志记录,后续执行try时就无法插入记录(主键约束)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗着,享受着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值