当前位置: 首页 > news >正文

Java 分布式事务详解:4 大类主流方案(原理、执行流程、优缺点、使用场景、区别对比)

目录

一、2PC 两阶段提交(数据库层面,XA 规范)

1. 原理 & 执行流程

2. Java 落地实现

3. 优缺点

4. 适用场景

二、TCC(Try-Confirm-Cancel,侵入代码型柔性事务)

1. 三段式执行流程(业务代码手动编码,无锁)

2. Java 落地

3. 优缺点

4. 适用场景

三、可靠消息最终一致性(本地消息表 / MQ 事务,最常用)

方案分两种:本地消息表、MQ 事务消息(RocketMQ、RabbitMQ 事务)

1. 本地消息表流程(通用,所有 MQ 都能用)

2. RocketMQ 事务消息(原生封装,省去本地消息表)

3. Java 落地

4. 优缺点

5. 适用场景

四、SAGA(长事务、大流程事务,Seata-SAGA)

1. 执行流程

2. Java 落地

3. 优缺点

4. 适用场景

四大方案核心区别对比表

Java 开发选型口诀

补充:Seata 框架(Java 分布式事务一站式)

Seata AT(最常用,无代码侵入的改进 2PC)


分布式事务:跨多个数据库 / 微服务的数据操作,要么全部成功、要么全部回滚,CAP 理论下不存在完美方案,工程分:**2PC、TCC、SAGA、本地消息表 / 可靠消息最终一致性(MQ 事务)** 四大主流,Java 开发最常用后三种。

前置:本地事务是单库 ACID;分布式跨库 / 跨服务,无法依赖数据库原生事务。

一、2PC 两阶段提交(数据库层面,XA 规范)

1. 原理 & 执行流程

2PC =准备阶段 (Prepare) + 提交阶段 (Commit),遵循 XA 规范,由事务协调者 TM+ ** 多个资源 RM (各个数据库)** 组成。

  1. 阶段 1:Prepare(预提交)TM 向所有参与的 RM 发送预提交请求; 各 RM 执行 SQL、锁定资源、写入 undo/redo 日志,但不真正提交事务,返回 ok / 失败; 任意一个 RM 返回失败,进入全局回滚。
  2. 阶段 2:Commit/Rollback(确认)
  • 全部 Prepare 成功:TM 下发 commit,各 RM 正式提交事务、释放锁;
  • 任一 Prepare 失败:TM 下发 rollback,所有 RM 回滚数据、释放锁。

2. Java 落地实现

  • JDBC XA:XADataSourceXAResource(MySQL、Oracle 支持 XA)
  • 框架:Atomikos、Bitronix、Narayana(JTA 规范实现),Spring JtaTransactionManager

3. 优缺点

✅优点:强一致性、编程简单,像本地事务一样使用 @Transactional ❌缺点:

  1. 性能极差:Prepare 阶段占用行锁 / 表锁,长事务阻塞其他请求;
  2. 协调者宕机阻塞:TM 宕机,RM 一直持有锁,死锁风险;
  3. MySQL 5.7 XA 有 bug,生产极少用。

4. 适用场景

短事务、少数据源(≤3 个库)、低并发,传统老旧项目,微服务基本弃用

二、TCC(Try-Confirm-Cancel,侵入代码型柔性事务)

1. 三段式执行流程(业务代码手动编码,无锁)

TCC 把每个微服务拆成Try、Confirm、Cancel三个接口,由事务协调器(Seata-TCC、ByteTCC)调度。

  1. Try:预留资源(检查 + 锁定资源,不正式扣减 / 新增)冻结资源:比如库存冻结、余额冻结,数据库执行冻结 SQL,业务数据状态变为「待确认」; 全部服务 Try 成功 → 进入 Confirm;任一失败 → 全部 Cancel。
  2. Confirm:确认提交(正式执行业务)所有服务 Confirm,把冻结资源实际扣减,永久落库;Confirm 必须幂等(防止重复调用)
  3. Cancel:取消回滚(释放预留资源)释放冻结资源,恢复数据;Cancel 也要幂等,避免重复回滚。

核心:Try 占资源、Confirm 确认、Cancel 补偿回滚,无数据库锁,靠业务状态控制

2. Java 落地

  • 框架:Seata TCC、ByteTCC、Hmily
  • 编码:每个分布式接口必须实现 3 个方法,侵入业务代码。

3. 优缺点

✅优点:性能高、无长事务锁、一致性可控、无中间件依赖; ❌缺点:代码侵入极强,开发量大,每个接口写 3 套逻辑,开发成本高

http://www.gsyq.cn/news/1476053.html

相关文章:

  • 经常寄快递怎么省钱 - 快递物流资讯
  • Inkscape光学设计插件:在矢量绘图中实现专业级光线追踪
  • 51单片机双机串口通信实战套件:带LCD实时状态显示、矩阵键盘交互、C#上位机监控与Proteus一键仿真
  • 3个技巧彻底解决Windows字体限制问题:No!! MeiryoUI零基础5分钟快速上手指南
  • Django搭建的流浪猫狗救助与领养全流程管理后台(含数据库和部署配置)
  • MIFARE Classic Tool终极指南:如何用Android手机轻松管理你的NFC门禁卡
  • LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
  • Python基础:字符串索引与切片操作完全指南
  • 昇腾CANN集群通信库hcomm:多机分布式训练的NCCL兼容通信方案
  • 【限时可复刻】CSDN AI+内容裂变+线索评分三步法:让咨询量暴涨210%的招生闭环(附配置参数表)
  • VidDown:免费视频解析下载 + 开发工具箱
  • 从零构建51单片机最小系统:原理、设计与调试全攻略
  • 从兼职工程师到行业认知:电源设计、3C认证与MCU选型的实战教训
  • 冷门技术内容冷启动难?用CSDN AI做选题挖掘,3步锁定高转化低竞争蓝海选题,错过再等半年!
  • SysDVR技术深度解析:Switch游戏实时串流架构设计与应用实战
  • 纯亚克力浴缸专业公司
  • CANopen协议实战指南:从总线原理到工程调试全解析
  • 智能时代工程师如何应对技术迭代与信息茧房挑战
  • Allegro高速PCB设计:Xnet创建与差分对等长约束实战指南
  • 仪器厂选型干货|实测多款串口屏,这家产品凭品质和交期脱颖而出
  • 如何用Zotero-Better-Notes实现智能笔记管理:3步快速上手指南
  • 书匠策AI官网www.shujiangce.com:论文党的“深夜急救箱“,期刊论文功能全拆解!
  • 鸣潮玩家如何用5小时完成50小时重复操作?ok-ww后台自动化实战指南
  • 【嵌入式必知】同步通信与异步通信
  • 第2周学习笔记
  • 【CSDN AI营销卡片深度拆解】:20年SEO老兵实测37篇对比数据,它真会稀释自然推荐权重吗?
  • ai辅助开发实践:借助快马智能生成应对instagram复杂页面结构的下载工具
  • 港澳通行证照片底色怎么弄?2026年手把手教程+换底色软件推荐
  • 2026合肥黄金回收测评指南|黄金首饰回收渠道深度对比盘点 - 资讯速览
  • 模具制造:从工业之母到手机外壳的生存逻辑与挑战