分布式事务解决方案之事务补偿型TCC事务
前言
前面介绍分布式事务解决方案之二阶段提交和分布式事务解决方案之三阶段提交两种解决方案。这篇介绍基于补偿型柔性事务TCC(try-confirm-cancel)。
所谓柔性事务:基于BASE理论,放弃强一致性,而实现最终一致性。
原理实现
业务场景(摘自慕课网视频教程):在一个下单购买电影票中,我们的主业务是创建订单,从业务包括(检查购票的座位是否存在、检查购票的座位是否已经售完),当从业务执行错误,执行回滚事务协调器调用cancel接口。
详细实现:
- 一个完整的业务活动由一个主业务服务于若干从业务服务组成。
- 主业务服务负责发起并完成整个业务活动
- 从业务服务提供TCC型业务操作
- 业务事务协调器控制业务活动的一致性,它登记业务活动中的操作,并在业务活动提交是确认所有的TCC操作的confirm操作,在业务活动取消时调用所有TCC型操作的cancel操作。
三个阶段工作职责
- Try:完成所有业务系统检查以及预留必须业务资源。
- Confirm:对业务系统做确认提交,Try阶段执行成功并开始执行Confirm阶段,Confirm操作要满足幂等性
- Cancel:释放Try阶段预留的业务资源,Cancel操作要满足幂等性
TCC与2PC协议比较
- 位于业务层而非资源层
- 没有单独的准备(Prepare)阶段,Try操作兼备资源操作与准备能力
- Try操作可以灵活选择业务资源的锁定粒度(以业务定粒度)
- 较高开发成本