分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。
事务特点 (ACID)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
如何实现分布式事务
3种基本方法:
- 基于 XA 协议的二阶段提交协议方法; (强一致性, 遵从 ACID)
- 三阶段提交协议方法; (强一致性, 遵从 ACID)
- 基于消息的最终一致性方法。 (最终一致性, 遵从 BASE 理论)
基于 XA 协议的二阶段提交协议方法
类似集中式互斥的方法, 该协议包含两部分:
- 事务管理器 (协调者)
- 本地资源管理器 (单机上的数据库-事务执行者)
具体过程:
- 投票阶段. 协调者向执行者发送事务, 执行者收到事务执行, 但不提交
- 提交阶段. 协调者收到所有执行者都准备好了的消息后, 让它们进行提交
缺点:
- 同步阻塞问题 (其它执行者不能访问临界资源)
- 单点故障问题 (协调者出错)
- 数据不一致问题 (如果协调者在提交阶段出错, 会有部分执行者未提交数据)
三阶段提交方法
是对二阶段的改进 (解决同步阻塞和数据不一致问题). 引入了:
- 超时机制 (协调者或执行者未收到消息时, 自动选择提交或回滚)
- 准备阶段 (引入预提交阶段)
具体过程:
- 投票阶段. 协调者向执行者发送事务, 执行者收到事务执行, 但不提交
- 预提交阶段. 利用超时机制, undo, redo
- 提交阶段.
基于分布式消息的最终一致性方案
2pc 和 3pc 都需要锁资源, 性能低, 3pc 没有解决数据不一致问题. 基于分布式消息的方案使用消息中间件.