分布式事务
XA
简介: XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。
流程:
-
- AP提交全局事物到TM
-
- 请求RM1;RM2,prepare_rm1, prepare_rm2
-
- RM1和RM2注册子事务到TM
-
- AP提交全部准备完毕到TM
-
- TM顺序通知RM1;RM2执行任务
异常情况:
2/5中发送异常,TM通知所有RM进行回滚
特点:
- 简单易理解,开发较容易
- 对资源进行了长时间的锁定,并发度低
SAGA
Saga 设计模式是一种跨分布式事务方案中的微服务管理数据一致性的方式。 Saga 是一个事务序列,用于更新每个服务并发布消息或事件以触发下一个事务步骤。 如果某个步骤失败,saga 会执行补偿事务,这些事务会应对前面的事务。
流程:
-
- AP提交任务给TM
-
- TM根据任务顺序调用RM1;RM2
异常情况
2中发送异常,调用补偿方法进行回滚事物
特点:
- 并发度高,不用像XA事务那样长期锁定资源
- 需要定义正常操作以及补偿操作,开发量比XA大
- 由于是通过补偿方式再次调用,可能出现调用失败情况,一致性较弱。
TCC
TCC(Try-Confirm-Cancel) 实际上是服务化的两阶段提交协议,业务开发者需要实现这三个服务接口,第一阶段服务由业务代码编排来调用 Try 接口进行资源预留,所有参与者的 Try 接口都成功了,事务管理器会提交事务,并调用每个参与者的 Confirm 接口真正提交业务操作,否则调用每个参与者的 Cancel 接口回滚事务。
流程:
-
- AP注册全局事务TM
-
- AP注册分支任务1/2到TM
-
- AP调用RM1/RM2,做资源try
-
- AP提交全局事物
-
- TM调用RM1/RM2根据状态调用confirm/cancel
特点:
- 幂等控制,防悬挂控制,允许空回滚