新闻详情

新闻详情

首页 / 资讯中心 / 详情

分布式事务总结

发布时间:2026/9/30 2:44:49来源:尧图网络
分布式事务总结
前提为什么会出现分布式事务在以往的单体项目只有一个数据库而微服务中有多个数据库。因为本地事务管不了跨服务、跨数据库的操作。所以出现分布式事务解决之问题一.分布式事务基本概念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即使短期不一致最终也会恢复。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

游戏更新完必蓝屏?恭喜你解锁“驱动地狱“成就 2026/9/30 12:53:32

游戏更新完必蓝屏?恭喜你解锁“驱动地狱“成就

为什么偏偏是"更新完游戏"才蓝屏 先讲清楚原理,不然永远是玄学。 大型游戏更新(尤其是大版本补丁)会做两件事:一是调用更新的图形API特性(DirectX 12 Ultimate、DLSS新版本等),二是触…

阅读更多 →
基于YOLO的猫品种检测数据集:2400张标注图像与迁移学习实战 2026/9/30 12:53:19

基于YOLO的猫品种检测数据集:2400张标注图像与迁移学习实战

1. 猫品种检测数据集的项目定位与核心价值1.1 为什么猫品种识别值得单独做一个数据集猫品种识别这件事,看起来像是“给照片打个标签”这么简单,但真正做过的人都知道,它比通用目标检测要麻烦得多。通用目标检测里,猫就是猫&#x…

阅读更多 →
客户案例:电商对账平台-账单审核解析(易仓电商ERP、亚马逊amazon) 2026/9/30 12:53:19

客户案例:电商对账平台-账单审核解析(易仓电商ERP、亚马逊amazon)

账单审核解析:1、功能介绍对原始账单进行详细分解,精确的区分出账单中的各项费用归属,打算精确的标签,销售账单、费用账单、其他账单等,账单解析主要是为了自动识别账单。针对不同的平台和不同的结算账户可以定义不同的…

阅读更多 →
Model-Optimizer:面向生产环境的模型优化工程方法论 2026/9/30 12:53:18

Model-Optimizer:面向生产环境的模型优化工程方法论

1. 这不是“一键压缩”,而是模型瘦身手术的术前诊断书“Model-Optimizer”这个词最近在工程团队的 Slack 频道里出现频率陡增,但翻遍 GitHub、PyPI 和主流论文库,你找不到一个叫这个名字的官方开源项目——它不是某个具体工具的商标&#xff…

阅读更多 →
Spring Boot 用户数据管理模块实践:安全认证与缓存优化 2026/9/30 12:53:18

Spring Boot 用户数据管理模块实践:安全认证与缓存优化

做了几年后端,手头业务系统换了一茬又一茬,但几乎每一个项目的第一步,都是先把“用户”这块地基打好。用户注册、信息维护、状态管理、登录权限,这套东西看起来简单,真正要做得稳、做得可扩展、经得住线上流量和频繁需…

阅读更多 →
AI大模型课程介绍 2026/9/30 12:53:18

AI大模型课程介绍

一、简介 1.大模型的发展与局限性 二、模型训练 1 热门模型本地部署 1.1 ollama本地快速部署deepseek 1.2 linux本地部署deepseek千问蒸馏版web对话聊天 1.3 linux本地部署通义万相2.1deepseek视频生成 1.4 Qwen2.5-Omni全模态大模型部署 1.5 Stable Diffusion中文文生…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉