分布式事务总结
前提为什么会出现分布式事务在以往的单体项目只有一个数据库而微服务中有多个数据库。因为本地事务管不了跨服务、跨数据库的操作。所以出现分布式事务解决之问题一.分布式事务基本概念1.参与者角色。2.二阶段提交2pc3.全局事务分支事务一参与者角色TC事务协调者。协调所有参与者管理全局事务提交或回滚TM事务发起者。发起全局事务并接受 TC 协调RM事务参与者。参与全局事务管理本地资源如本地数据库事务二二阶段提交2pc第一阶段TC 通知所有参与者准备提交参与者执行本地事务但不提交将准备结果通知 TC第二阶段如果所有参与者都成功TC 协调所有参与者提交事务如果存在参与者准备失败TC 协调所有参与者回滚事务三全局事务分支事务全局事务又称分布式事务包含所有分支事务分支事务又称本地事务是某个服务中的本地数据库事务二.常见的解决方案1.XA 协议2.TCC3.Seata AT 模式4.Saga一XA 协议XA 是数据库层面的分布式事务协议基于 2PC1.原理步骤一每个事务的参与者执行本地事务操作执行完之后通知事务的协调者但是不提交步骤二协调者汇总所有参与者状态全部成功通知所有参与者提交任意失败通知所有参与者回滚2.优点解决分布式事务的问题3.缺点存在事务挂起资源空耗性能低下二TCCTCC是将业务接口拆成三个接口。分别为Try、Confirm、Cancel1.三个阶段三个阶段对应三个接口Try尝试资源锁定。例如转账时冻结资金Confirm确认真正执行业务。例如解冻并完成转账Cancel取消逆向补偿。例如解冻资金2.两阶段准备阶段TC调用所有服务的Try接口提交阶段TC根据结果调用接口)全部成功调用 Confirm存在失败调用 Cancel3.优点能实现分布式事务没有事务挂起性能较好灵活度高4.缺点业务接口一拆三工作量和复杂度高。需要进行业务改造工作量大实现复杂三Seata AT 模式AT 是 Seata 创新的一种非侵入式分布式事务解决方案。1.原理前提在各个事务的数据库中建表 undo_log表第一阶段直接执行业务seata代理数据源DataSource)拦截sql执行提取sql执行前后的数据镜像将前后数据镜像转化成一条sql加入到当前本地事务执行提交插入到undo_log表中第二阶段TC 协调所有参与者全部成功直接删除undo_log。存在失败根据undo_log中的前后镜像生成逆向补偿 SQL执行回滚。四SagaSaga 是长事务解决方案。一阶段正向服务。二阶段补偿服务。三.seata的AT模式全局事务执行过程第一阶段全局事务开启与分支事务执行TM向TC开启全局事务TC生成全局唯一XID并返回。TM调用下游服务透传XID。下游RM获取XID向TC注册分支事务。RM执行SQL前生成前置镜像Before Image。RM执行SQL生成后置镜像After Image并将两者记录至undo_log。申请全局锁写隔离核心RM提交本地事务前向TC申请该行数据的全局锁。成功继续执行。失败重试超时则本地回滚并抛异常。获取全局锁后RM提交本地事务并释放本地锁但继续保持持有全局锁。第二阶段全局事务结束与锁释放TM根据执行情况向TC发起全局提交或回滚。全局提交TC通知RM清理undo_log释放全局锁。全局回滚TC通知RM利用undo_log反向补偿回滚完成后释放全局锁。核心逻辑本地事务提交前必须拿到全局锁且在全局事务彻底结束前不释放以此防止分布式环境下的脏写。四.seata的AT模式如何实现写隔离?获取本地锁分支事务开始时会先获取数据库的本地锁执行数据更新操作。申请全局锁在本地事务提交前必须向 TC 申请该数据记录的全局锁。等待与重试如果全局锁已被其他全局事务持有当前事务会释放本地锁并回滚然后通过循环不断重试尝试重新获取本地锁和全局锁直到超过预设的超时时间。提交与释放成功获取全局锁后本地事务才会提交并释放本地锁。全局锁会一直持有到整个全局事务完成二阶段结束后才释放。五.全局锁与本地锁的区别管理方全局锁由 Seata TC 管理本地锁由本地数据库管理。范围全局锁跨服务本地锁只在单个服务内。粒度全局锁锁数据行本地锁锁连接或行。释放时机全局锁等整个全局事务结束才释放本地锁本地事务一提交或回滚就释放。目的全局锁防止全局事务之间脏写本地锁保证本地事务 ACID。核心区别全局锁管分布式写隔离本地锁管单机事务一致性。六.缓存与数据库不同步如何解决Cache Aside最常用读先读缓存未命中读数据库再回填缓存并设过期时间。写先更新数据库再删除缓存。不要更新缓存直接删避免并发写覆盖。延迟双删更新数据库后删一次缓存延迟几百毫秒再删一次。用来应对并发读回填旧数据、主从延迟等问题。订阅 binlog MQ高可靠用 Canal 等监听 MySQL binlog发消息到 MQ消费者再删缓存。业务解耦失败可重试保证最终一致。分布式锁 / 版本号同一 key 的读写串行化或缓存带版本号做 CAS。适合强一致场景但性能差。过期时间兜底所有缓存都设 TTL即使短期不一致最终也会恢复。

相关新闻

基于Python的毕业生去向反馈调查平台系统-附源码

基于Python的毕业生去向反馈调查平台系统-附源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/30 2:44:59 阅读更多 →
CSIRO 生物多样性栖息地指数 v4(BHI v4)数据集深度解析:从波段属性到全球生物多样性监测

CSIRO 生物多样性栖息地指数 v4(BHI v4)数据集深度解析:从波段属性到全球生物多样性监测

CSIRO 生物多样性栖息地指数 v4(BHI v4)数据集深度解析:从波段属性到全球生物多样性监测 摘要 生物多样性栖息地指数(Biodiversity Habitat Index, BHI)v4 是澳大利亚联邦科学与工业研究组织(CSIRO&#…

2026/9/30 2:44:59 阅读更多 →
Linux压缩解压缩原理与实战:tar/gzip/xz/zip分层解析

Linux压缩解压缩原理与实战:tar/gzip/xz/zip分层解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 2:44:59 阅读更多 →

最新新闻

RDMA技术调研:InfiniBand、RoCE与iWARP选型及verbs编程实战

RDMA技术调研:InfiniBand、RoCE与iWARP选型及verbs编程实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 4:34:01 阅读更多 →
企业RAG知识库实战:Office文档直接喂给AI,自动变成问答机器人

企业RAG知识库实战:Office文档直接喂给AI,自动变成问答机器人

你们公司的共享盘里,是不是也躺着堆成山的 Word 方案、Excel 报表、PPT 汇报和 PDF 制度?想找一份三年前的合同模板,能翻半小时还找不到;新员工问个报销流程,老同事说“在某某部门的共享文件夹里”,结果那个…

2026/9/30 4:34:01 阅读更多 →
阿里30章手册:企业级Agent落地与工程化实战指南

阿里30章手册:企业级Agent落地与工程化实战指南

直接说结论:企业做 Agent 落地,最大的坑往往不在模型能力,而在工程化。模型选型、提示词调优只是冰山一角,真正让人头疼的是稳定复现、权限管控、成本治理、灰度发布这一整条链路。最近看到阿里开源的一本 30 章的企业级 Agent 落…

2026/9/30 4:34:01 阅读更多 →
AI薪资差距不在技术而在习惯:10个让AI真正为你挣钱的日常习惯

AI薪资差距不在技术而在习惯:10个让AI真正为你挣钱的日常习惯

1. AI从业者的薪资差距,核心不在技术深度而在习惯体系到了2026年这个节点,行业里其实已经不太缺“会用AI的人”了。你在招聘软件上翻一圈,几乎每个JD都会写“熟练使用AI工具”“具备Prompt工程能力”,面试的时候大家也都能聊几句A…

2026/9/30 4:34:01 阅读更多 →
斐波那契数列模型:从递归到矩阵快速幂的算法选型指南

斐波那契数列模型:从递归到矩阵快速幂的算法选型指南

我第一次被斐波那契数列“教育”,是在一次模拟面试里。面试官让我实现一个“爬楼梯”函数,我自信地写出递归版,然后他追问了一句:“如果 n 是 50 呢?”我现场跑了一下,空气凝固了几秒。后来我才想明白&…

2026/9/30 4:34:01 阅读更多 →
std::vector<T*>与std::vector<T>*:内存所有权与生命周期深度解析

std::vector<T*>与std::vector<T>*:内存所有权与生命周期深度解析

做了这么多年C&#xff0c;代码评审里最让我头疼的写法之一&#xff0c;就是有人把std::vector<T*>和std::vector<T>*混着用。这不是说这两种写法本身多可怕&#xff0c;而是很多人没意识到它们回答的是两个完全不同的问题&#xff1a;前者回答"容器里的元素以…

2026/9/30 4:33:01 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述&#xff1a;为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多&#xff0c;后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表&#xff0c;动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介&#xff1a;本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档&#xff0c;聚焦城市公共广告资源信息化管理痛点&#xff0c;提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构&#xff0c;含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求&#xff0c;背景很直接&#xff1a;公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关&#xff0c;开放给几个业务团队用。结果第一个月账单出来&#xff0c;额度直接超了 4 倍。仔细查日志&#xff0c;发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集&#xff1a;Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →