2026-01-17 06:41:30
分布式事务是随着系统架构复杂化,尤其是微服务架构普及后,为保证跨数据库、跨服务数据一致性的关键技术。以下从事务基础概念出发,逐步深入分布式事务的核心内容。
事务是一组不可分割的操作集合,具备“要么全做,要么全不做”的特性,其核心特性为ACID:
本地事务主要涉及单数据库或多数据库场景下的数据一致性保障。
1. 单数据库事务以游戏交易系统为例,玩家用金币购买道具,流程包括扣除金币和添加道具。若两表在同一数据库,单数据库事务可轻松保证一致性:
玩家数量激增时,金币表与道具表分库存储。此时单数据库事务无法保证一致性,可采用后置提交事务策略:

微服务架构下,业务流程常跨多个子系统,需分布式事务保证跨数据库操作一致性。分布式事务主要关注强一致性和最终一致性解决方案,典型方案包括两阶段提交、消息事务+最终一致性、TCC补偿模式。
1. 基于XA协议的两阶段提交XA协议由Tuxedo提出,含事务管理器和本地资源管理器。本地资源管理器由数据库实现,事务管理器负责全局调度。
准备阶段:事务管理器向各资源管理器发送准备请求,资源管理器执行操作并反馈结果。
提交阶段:若所有资源管理器准备成功,事务管理器发送提交请求;否则发送回滚请求。

消息事务基于消息中间件的两阶段提交,将本地事务和发消息放在同一分布式事务。以RocketMQ为例:
A系统发送预备消息到消息中间件。
消息中间件保存预备消息并返回成功。
A执行本地事务。
A发送提交消息给消息中间件。
步骤一或二出错,整个事务失败,不执行A本地操作。
步骤三出错,A系统实现回调接口,消息中间件检查事务执行情况,失败则回滚预备消息。
步骤四出错,消息中间件通过回调接口检查到A执行成功,自动提交消息。


TCC(Try-Confirm-Cancel)模型不依赖资源管理器对分布式事务的支持,通过分解业务逻辑实现分布式事务。
Try:完成业务检查,预留资源。
Confirm:执行业务逻辑,使用Try阶段预留资源,需满足幂等性。
Cancel:释放Try阶段预留资源,也需满足幂等性。
主业务服务:发起并完成业务活动,编排服务。
从业务服务:提供TCC业务操作,实现Try、Confirm、Cancel接口。
业务活动管理器:管理控制业务活动,记录维护事务状态,调用Confirm或Cancel操作。
主业务服务开启本地事务,申请启动分布式事务。
注册从业务活动,调用从业务服务Try接口。
Try接口调用成功,提交本地事务;失败则回滚。
根据本地事务提交或回滚情况,调用从业务服务Confirm或Cancel接口。
所有操作完成,全局事务结束。
分布式事务本质是对多个数据库事务统一控制,按控制力度分为不控制、部分控制和完全控制。
选择分布式事务方案需结合业务场景,技术人员应注重技术为业务服务,根据业务需求进行合理技术选型。