微服务篇之分布式事务

一、Seata架构

Seata事务管理中有三个重要的角色:

TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

1.Seata的XA模式

RM一阶段的工作:

  1. 注册分支事务到TC。 2. 执行分支业务sql但不提交。 3. 报告执行状态到TC。

TC二阶段的工作:

  1. TC检测各分支事务执行状态,如果都成功,通知所有RM提交事务,如果有失败,通知所有RM回滚事务。

RM二阶段的工作: 1. 接收TC指令,提交或回滚事务。

总结:保证了数据的强一致性。

2. Seata的AT模式

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。

阶段一RM的工作:1. 注册分支事务。 2. 记录undo-log(数据快照)。 3. 执行业务sql并提交。 4. 报告事务状态。

阶段二提交时RM的工作: 1. 删除undo-log即可。

阶段二回滚时RM的工作: 1. 根据undo-log恢复数据到更新前。

3.Seata的TCC模式

  1. Try:资源的检测和预留。

  2. Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。

  3. Cancel:预留资源释放,可以理解为try的反向操作。

二、MQ分布式事务

三、总结

四、面试题

**面试官:**你们采用哪种分布式事务解决方案?

**候选人:**我们当时是xx项目,主要使用到的seata的at模式解决的分布式事务。

seata的AT模型分为两个阶段:

1、阶段一RM的工作:① 注册分支事务 ② 记录undo-log(数据快照)③ 执行业务sql并提交 ④报告事务状态。

2、阶段二提交时RM的工作:删除undo-log即可。

3、阶段二回滚时RM的工作:根据undo-log恢复数据到更新前。

at模式牺牲了一致性,保证了可用性,不过,它保证的是最终一致性。

相关推荐
疯狂打码的少年4 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
Mr数据杨6 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
2601_962056236 小时前
Spring Boot 入门 与 无法解析符号 springframework 的解决
java·spring boot·后端
Mr数据杨6 小时前
【Codex】用部门管理模块维护组织架构与管理层级
架构·django·codex·项目开发
国医中兴6 小时前
电子病历的时序数据分析:ClickHouse在临床指标监控中的落地
微服务·云原生·容器·kubernetes·k8s
Thomas21436 小时前
Java scala 数组 链表
java·链表·scala
亚历克斯神7 小时前
低代码与 AI 的融合趋势——从可视化搭建到自然语言生成应用
java·spring·微服务
Capricorn19887 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
学长毕业设计7 小时前
基于SpringBoot的瑜伽馆网站的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
一嘴一个橘子7 小时前
nginx 常用命令(在 nginx 目录下执行)
java