分布式事务2PC实现:面试核心解析
面试鸭返利网友情提示:备战2025Java面试?最新《2025年Java面试宝典》网盘资源速取!
🔗 网盘地址:https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码:9b3g

什么是分布式事务?
当我们的业务从单体架构扩展到微服务,一个操作可能横跨多个数据库或服务。比如电商的"下单扣库存"操作,订单服务和库存服务独立部署,这就产生了分布式事务问题——如何保证跨服务的操作要么全成功,要么全失败?
2PC:经典的分布式事务方案
2PC(Two-Phase Commit),即两阶段提交协议,是解决分布式事务的核心算法之一。它的核心思想是引入一个协调者(Coordinator)来统一调度所有参与者(Participant)的操作,分为两个关键阶段:
第一阶段:准备阶段(Prepare Phase)
- 协调者发起请求:向所有分布式事务参与者发送
prepare请求,包含具体操作内容。 - 参与者执行本地事务:各参与者执行本地事务操作(如锁定资源、写undo/redo日志),但不提交。
- 参与者反馈:参与者根据本地执行结果,向协调者返回
Yes(准备就绪)或No(执行失败)。

第二阶段:提交/回滚阶段(Commit/Rollback Phase)
- 所有参与者返回Yes:协调者发送
commit命令,参与者正式提交本地事务并释放资源,返回Ack确认。 - 任意参与者返回No或超时:协调者发送
rollback命令,参与者根据日志回滚本地操作并释放资源。

2PC实现的优缺点剖析
优点:
- 强一致性:严格保证ACID中的C(一致性),是分布式事务的理想目标。
- 实现相对成熟:数据库如MySQL XA协议就是基于
2PC的实现。
缺点(面试高频考点!):
- 同步阻塞:所有参与者在准备阶段锁定资源,直到收到协调者最终指令才释放。高并发下性能瓶颈明显,影响分布式事务吞吐量。
- 单点故障风险:协调者宕机可能导致参与者永久阻塞(尤其在第二阶段未发出指令时)。
- 数据不一致隐患:
- 若协调者与部分参与者在第二阶段通信中断,可能导致部分提交、部分未提交。
- 协调者发送完commit后宕机,部分参与者收不到指令,依然阻塞。
实际场景中的2PC优化
虽然原生2PC存在缺陷,但在可靠中间件支撑下仍有应用:
- 数据库中间件:如ShardingSphere通过XA模式封装了
2PC的实现细节。 - 混合方案:结合TCC、Saga等柔性事务做补偿,减少同步阻塞时间。
- 协调者高可用:通过集群部署+选举机制(如Raft)避免单点故障。
程序员小贴士:搞懂2PC原理是应对分布式系统面试的基本功。掌握其流程、痛点及优化方向,能让你在面试中游刃有余。如果需要系统刷题备战,别忘了 面试鸭返利网 !通过他们购买面试鸭会员,还能返利25元,降低学习成本。
本文由 面试鸭返利网 提供技术支持,专注程序员面试福利资讯。


