分布式事务框架有哪些

什么是事务?

事务从本质上讲就是:逻辑上的一组操作,组成这组操作的各个逻辑单元在不同的服务甚至服务器上,保证它们要成功就都成功,要失败就都失败。

事务的四大特性
提到事务就不得不提事务的四大特性(基本特征) ACID:

原子性(atomicity):“原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上缺一不可。事务的原子性要求事务中的所有操作要么都执行,要么都不执行。

一致性(consistency):“一致”指的是数据的一致,具体是指:所有数据都处于满足业务规则的一致性状态。一致性原则要求:一个事务中不管涉及到多少个操作,都必须保证事务执行之前数据是正确的,事务执行之后数据仍然是正确的。如果一个事务在执行的过程中,其中某一个或某几个操作失败了,则必须将其他所有操作撤销,将数据恢复到事务执行之前的状态,这就是回滚。

隔离性(isolation):在应用程序实际运行过程中,事务往往是并发执行的,所以很有可能有许多事务同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。隔离性原则要求多个事务在并发执行过程中不会互相干扰。

持久性(durability):持久性原则要求事务执行完成后,对数据的修改永久的保存下来,不会因各种系统错误或其他意外情况而受到影响。通常情况下,事务对数据的修改应该被写入到持久化存储器中。

分布式事务


为什么要有分布式事务?
本地事务只能解决同一工程中的事务问题,而现在的场景更加复杂,关系到多个服务,怎么保证要么都成功,要么都失败?
分布式系统异常除了本地事务那些异常之外,还有:机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失等,这时候就需要引入分布式事务。

分布式事务出现的场景
不同的服务,不同数据库

相同的服务,不同数据库

不同的服务,相同数据库

主流的分布式事务框架分类及代表方案,覆盖不同技术栈与一致性模型:


一、Java 技术栈框架

1. AT/XA 模式主导
框架核心机制适用场景特点
SeataAT(自动回滚)、TCC、Saga、XA微服务架构、多数据源操作阿里开源,生态完善,支持多种模式
ByteTCCTCC(手动补偿)金融支付、库存冻结等精确控制轻量化,强一致性保障
2. 消息事务方案
框架核心机制适用场景
RocketMQ事务消息(半消息+本地事务)跨服务最终一致,异步解耦
Apache Kafka事务生产者(Exactly-Once)日志处理、流式计算场景
3. Saga 长事务方案
框架核心机制特点
ServiceComb-Saga状态机编排+补偿事务华为开源,适合复杂业务流程
Eventuate Tram事件驱动+异步补偿基于CDC(变更数据捕获)

二、.NET 技术栈框架

框架核心机制特点
DotNet.CAP本地消息表+事务消息总线支持RabbitMQ/Kafka,.NET Core首选
DTMTCC、Saga、XA跨语言支持(Go/Java/.NET)

三、多语言通用框架

框架核心机制特点
DTM二阶段提交、TCC、Saga支持HTTP/gRPC,跨语言能力强
NarayanaJTA/XA协议老牌Java事务管理器,兼容Jakarta EE

四、选型关键维度

维度高优先级场景推荐框架
强一致性金融转账、库存扣减Seata(XA模式)、ByteTCC
最终一致订单创建、物流通知RocketMQ事务消息、DotNet.CAP
长流程事务跨多服务审批流ServiceComb-Saga、Eventuate Tram
跨语言需求混合技术栈系统DTM

附:一致性模型对照

  • CP模型‌(强一致):XA、TCC
  • AP模型‌(最终一致):Saga、事务消息

五、典型架构示例

Seata AT模式流程
[TM]@GlobalTransactional
    │
    ├─1. 调用服务A(RM) → 生成SQL快照(Undo Log)
    │   └─ 注册分支事务到TC
    │
    └─2. 调用服务B(RM) → 生成SQL快照
        └─ TC全局提交/回滚决策 → 异步清理或补偿
RocketMQ事务消息流程
[Producer]
    │  1. 发送半消息(对Consumer不可见)
    │
    ├─2. 执行本地事务(如订单创建)
    │
    └─3. 本地事务成功 → 提交消息(Consumer可见)
        失败 → 回滚消息(MQ自动删除)

避坑指南‌:

  • Seata AT模式需数据库支持‌行锁‌(如MySQL InnoDB)
  • TCC模式需业务层实现‌幂等‌与‌空回滚‌防御
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值