分布式事务-2PC/3PC

2018/06/03 分布式事务 2PC 3PC

分布式事务XA协议组件

XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。

  • 应用程序( AP )
  • 事务管理器( TM ) - 事务中间件
  • 资源管理器( RM )- 数据库
  • 通信资源管理器( CRM )- 消息中间件

XA-DTP

XA-2PC

2PC

Two Phase Commitment Protocol,主要有两个角色(协调者和参与者)

  • 准备阶段 - vote
  • 提交阶段 - rollback or commit

注意参与者在准备阶段就会进行所有事务操作,并记录undo/redo日志,只是还没有提交本地事务。

缺点

  • 参与者一直占有资源(同步阻塞)
  • 协调者单点
  • 协调者故障造成数据不一致(阶段2中部分参与者收到commit消息,其他丢消息)
  • 阶段2中协调者和收到消息的参与者down机,事务状态不定

3PC

Three Phase Commitment Protocol,引入了超时和canCommit

  • canCommit
  • preCommit - 事务操作,记录undo/redo日志
  • doCommit

注意在doCommit阶段,协调者长时间未收到preCommit的ACK时会发送abort请求;参与者长时间未收到协调者的doCommit/abort请求时会默认自动commit。

缺点

第三阶段协调者的abort指令因为网络原因未成功发送到参与者造成超时,因为参与者在这阶段默认会执行事务,造成事务不一致。

后记

there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos.

Search

    Table of Contents