分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。

事务特点 (ACID)

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

如何实现分布式事务

3种基本方法:

  • 基于 XA 协议的二阶段提交协议方法; (强一致性, 遵从 ACID)
  • 三阶段提交协议方法; (强一致性, 遵从 ACID)
  • 基于消息的最终一致性方法。 (最终一致性, 遵从 BASE 理论)

基于 XA 协议的二阶段提交协议方法

类似集中式互斥的方法, 该协议包含两部分:

  • 事务管理器 (协调者)
  • 本地资源管理器 (单机上的数据库-事务执行者)

具体过程:

  1. 投票阶段. 协调者向执行者发送事务, 执行者收到事务执行, 但不提交
  2. 提交阶段. 协调者收到所有执行者都准备好了的消息后, 让它们进行提交

缺点:

  • 同步阻塞问题 (其它执行者不能访问临界资源)
  • 单点故障问题 (协调者出错)
  • 数据不一致问题 (如果协调者在提交阶段出错, 会有部分执行者未提交数据)

三阶段提交方法

是对二阶段的改进 (解决同步阻塞和数据不一致问题). 引入了:

  • 超时机制 (协调者或执行者未收到消息时, 自动选择提交或回滚)
  • 准备阶段 (引入预提交阶段)

具体过程:

  1. 投票阶段. 协调者向执行者发送事务, 执行者收到事务执行, 但不提交
  2. 预提交阶段. 利用超时机制, undo, redo
  3. 提交阶段.

基于分布式消息的最终一致性方案

2pc 和 3pc 都需要锁资源, 性能低, 3pc 没有解决数据不一致问题. 基于分布式消息的方案使用消息中间件.

对比

image.png

总结

image.png