分布式事务XA协议组件
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。
- 应用程序( AP )
- 事务管理器( TM ) - 事务中间件
- 资源管理器( RM )- 数据库
- 通信资源管理器( CRM )- 消息中间件
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.