题目11:分布式事务与最终一致性
📊 评分:— | 📅 完成时间:待完成
📝 题目
分布式事务你们是怎么处理的?2PC、TCC、本地消息表、最大努力通知分别适用于什么场景?你更推荐哪一种?
💬 我的回答
📖 参考答案
一、为什么需要分布式事务
单体应用一个本地事务就能保证一致性,但微服务拆分后,一个业务流程会跨多个服务和数据库,需要在一致性和可用性之间做权衡。
二、常见方案
1. 2PC
- 强一致
- 协调成本高
- 阻塞问题明显
2. TCC
- Try / Confirm / Cancel
- 业务侵入性强
- 适合核心资金类场景
3. 本地消息表
- 先落库再投递消息
- 配合重试实现最终一致性
- 工程上比较常见
4. 最大努力通知
- 允许短时不一致
- 通过重试和对账兜底
三、实践建议
- 核心链路优先考虑 TCC 或强补偿设计
- 普通业务链路更多采用消息最终一致性
- 最终一致性一定要配幂等、重试、对账
🎯 面试标准话术
"真实项目里很少追求绝对强一致,更多是根据业务场景做取舍。比如支付、库存这类核心链路,会用更严格的补偿机制;而大多数业务场景,我更倾向用本地消息表或 MQ 事务消息来做最终一致性。"