分布式事务

2021年双十一,我们下单服务的分布式事务在零点流量峰值时彻底崩溃。

事后复盘:开发团队用了 2PC 做跨库扣款,库存服务超时导致全局事务回滚。结果是 2000 多笔订单超时锁定,用户体验崩塌,直接损失超过 50 万。

【架构权衡】 2PC 在生产环境里最大的问题不是协议本身,而是它对协调者的高可用和网络的容错几乎为零。一旦出现分区,事务可能永久阻塞。这个案例让我意识到:分布式事务没有银弹,选型必须基于业务对一致性的真实需求。

一、内容总览

本模块覆盖分布式事务的完整知识体系,从协议原理到工程落地:

1.1 协议基础

协议一致性级别性能阻塞适用场景
2PC强一致阻塞同库操作、不允许最终一致
3PC强一致有限阻塞对可用性有要求的强一致场景

1.2 补偿模式

模式一致性性能侵入性复杂度
TCC最终一致
Saga最终一致
本地消息表最终一致

1.3 工程实践

中间件模式适用场景学习优先级
Seata ATAT 模式业务无感知的自动补偿🔴 高频
Seata TCCTCC 模式需要业务强控制的场景🔴 高频
RocketMQ 事务消息本地消息表可靠消息最终一致🟡 常考

1.4 选型决策

场景推荐方案原因
跨库强一致2PC数据一致零妥协
跨服务最终一致TCC/Saga性能和可用性平衡
允许异步对账本地消息表实现简单,侵入性低

二、学习路径指引

第一阶段:啃透 2PC/3PC(3-5 天)

先看 2PC 协议详解 理解两阶段提交的原理和角色划分,然后看 2PC 的问题分析 搞清楚为什么生产环境踩坑无数。对比 2PC vs 3PC 理解两者的差异和各自的局限性。

【架构权衡】 2PC 的核心问题是:协调者宕机后,参与者可能永远锁定资源。3PC 通过预提交阶段降低了这种风险,但依然无法彻底解决分布式事务的一致性问题。理解这一点,才能理解为什么 TCC 和 Saga 成为主流。

第二阶段:掌握 TCC 与 Saga(5-7 天)

TCC 模式 是国内最常用的分布式事务方案,建议结合 TCC 避坑指南TCC 幂等性 一起看。然后学习 Saga 模式Saga 的恢复策略

⚠️

TCC 最大的坑是空回滚和事务悬挂。Try 阶段超时导致 Cancel 先执行,叫空回滚;Confirm 失败但 Cancel 没有执行,叫悬挂。没见过这两个坑的候选人,面试被问到就是送命题。

第三阶段:工程落地(持续)

生产环境里,Seata 是国内使用最广的分布式事务框架。先看 Seata AT 模式 理解它是怎么做自动补偿的,再看 Seata TCC 模式 理解如何与业务代码结合。最后看 方案选型 做出架构决策。

三、生产避坑速查

翻车场景根因解决方案
2PC 协调者宕机,事务永久阻塞单点协调者无高可用升级到 TCC 或 Saga
TCC 空回滚Try 超时但已执行,Cancel 先于 Try幂等 + 状态机控制
TCC 悬挂Confirm/Cancel 顺序错乱悬挂处理 + 超时检测
分布式事务最终不一致补偿链路断裂本地消息表 + 定时对账
Seata AT 模式全局锁竞争激烈隔离级别设置不当调整为读已提交 + 业务优化

四、面试高频考点

分布式事务是面试官最爱深挖的领域,三层追问必须准备:

第一追问:2PC 的协调者宕机了怎么办?

考察候选人对 2PC 缺陷的理解。必须能说出协调者单点问题、参与者锁定资源、全局回滚失败等风险。

第二追问:TCC 的空回滚和悬挂是怎么产生的?怎么解决?

考察候选人的实战深度。必须能讲清楚 Try-Confirm-Cancel 的状态流转,以及幂等性和悬挂检测的实现。

第三追问:你们生产环境用的什么方案?为什么不用 2PC?

考察候选人的架构权衡能力。能说清楚业务对一致性的需求、选择了什么方案、为此付出了什么代价。

级别期望回答判分标准
P5能背出 2PC/TCC/Saga 流程基本概念正确
P6能分析各方案的性能和一致性代价能回答追问,不怵细节
P7能为业务场景选择最优事务方案有全局视野,能做权衡

本模块覆盖从协议原理到生产实践的完整链路,每个知识点都来自真实架构评审和生产事故。