写点什么

分布式事务 - 事务补偿(TCC)

作者:zarmnosaj
  • 2022-10-24
    四川
  • 本文字数:764 字

    阅读完需:约 3 分钟

事务补偿(TCC)是什么

TCC 事务补偿是基于 2PC 实现的事务控制方案,相当于是一个补足,TCC 分别表示:Try、Confirm 和 Cancel。其含义为:


  1. Try:检查及预留数据库业务资源,完成提交事务前的检查,并预留好资源,不执行 commit,失败则重试。

  2. Confirm:确定执行业务操作,对 try 阶段预留的资源正式执行 commit,失败则重试。

  3. Cancel:取消执行业务操作 对 try 阶段预留的资源释放,相当于回滚,失败则重试。

事务补偿(TCC)说明

以一个下单减库存的业务为例说明:

Try 阶段

一个下单操作,内部由订单服务和库存服务协同完成,订单服务生成订单信息,库存服务扣减库存数量。


在 try 阶段订单服务和库存服务会检查并预留资源。


订单服务检查当前是否满足提交订单的条件,例如当前用户的状态、是否有未完成的订单等信息,如果检查未通过,则不允许创建订单,之后的一系列操作也会终止于此。


而库存服务检查当前是否有充足的库存,并锁定库存资源,避免在此期间其他操作对库存有所变更。

Confirm 阶段

订单服务和库存服务都成功完成 Try 阶段后,开始正式执行资源操作。订单服务向订单写一条订单信息并执行 commit 操作。库存服务执行库存减少操作并执行 commit 操作。

Cancel 阶段

如果订单服务或者库存服务有一方出现失败的情况,则订单服务和库存服务都全部取消操作。订单服务需要删除新增的订单信息。 库存服务将减去的库存还原。

总结

事务补偿(TCC)的优点:保了证数据的最终一致性,在业务层实现事务控制,灵活性好。事务补偿(TCC)的缺点:开发成本高,每个需要实现分布式事务的地方都需要每个参与者实现 try/confirm/cancel 三个接口。


在 try/confirm/cancel 每个阶段如果发生了失败情况,则会不断重试,这也说明了为什么是保证了数据的最终一致性。


注意,在有重试机制存在的情况下,则需要 try/confirm/cancel 每个接口都实现幂等性,即操作多次的结果和操作一次的结果是一致的。

发布于: 刚刚阅读数: 4
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020-02-06 加入

成都后端

评论

发布
暂无评论
分布式事务-事务补偿(TCC)_10月月更_zarmnosaj_InfoQ写作社区