中间件-seata

分布式事务seata

角色组成

  1. TC:事务协调者,维护全局和分支事务的状态,驱动全局事务提交或回滚。
  2. TM:事务管理者,定义全局事务的范围:开始全局事务、提交或回滚全局事务。
  3. RM:资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    TC为单独部署的Server服务端,TM和RM为嵌入到应用中的Client客户端。

角色指责

  1. TM请求TC开启一个全局事务。TC会生成一个XID作为该全局事务的编号。XID会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起。
  2. RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联。
  3. TM通知TC告诉XID对应的全局事务是进行提交还是回滚。
  4. TC驱动RM们将XID对应的自己的本地事务进行提交还是回滚。

AT模式

两阶段提交:

一阶段:生成undolog(前置镜像、后置镜像),拿到本地锁,做业务数据修改,拿到全局锁,提交本地事务。如果未拿到全局锁,超时失败将回滚本地事务,释放本地锁。

二阶段:

成功:(异步操作)删除undolog,释放全局锁。

失败:查找undolog,驱动RM回滚本地事务,释放全局锁。

TCC模式

TCC模式与AT模式比更灵活,不需要依赖数据库。但是需要手动实现try、commit、cancel3个方法。TCC框架还存在3个问题:空回滚、幂等、悬挂。使用useTCCFence参数(增加日志表记录全局事务状态)可以解决。

相关推荐
阿昌喜欢吃黄桃3 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
半夜修仙4 天前
延迟队列的介绍及常见问题
java·数据库·中间件·rabbitmq
手握风云-4 天前
一条消息的旅程:RabbitMQ 学习与实践(一)
中间件·rabbitmq
RH2312115 天前
2026.6.8Linux
java·数据库·中间件
理人综艺好会6 天前
双Token机制在实际项目中的应用与实践
中间件·token
番茄去哪了6 天前
神领物流面试题(一)
java·大数据·中间件
念何架构之路6 天前
消息中间件
中间件
都说名字长不会被发现6 天前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
瀚高PG实验室7 天前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
之歆7 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express