通用型 TCC 解决方案就是最典型的 TCC 模型实现,所有从业务服务都需要参与到主业务服务的决策当中,如下图所示。
▲ 通用 TCC 模型
由于从业务服务的结果会影响到主业务服务的决策,因此通用型 TCC 解决方案适用于执行时间确定且较短的业务,比如互联网金融企业最核心的三个服务:交易、支付、账务。
▲ 支付业务流程
当用户发起一笔交易时,首先访问交易服务,创建交易订单;然后交易服务再调用支付服务为该交易创建支付订单,执行收款,最后支付服务调用账务服务记录账户流水和记账。
为了保证三个服务一起完成一笔交易,可以使用通用型 TCC 分布式事务模型,将这三个服务放在一个分布式事务中,交易作为主业务服务,支付作为从业务服务,账务作为支付的嵌套从业务服务,由 TCC 模型保证事务的原子性。
▲ 支付业务的 TCC 流程
支付服务的 Try 接口创建支付订单,并调用账务服务的 Try 接口;账务服务在 Try 接口中冻结买家资金。一阶段调用完成后,交易完成,提交本地事务,由 TCC 框架完成分布式事务各从业务服务二阶段的调用。
支付服务二阶段先调用账务服务的 Confirm 接口,解冻买家资金;增加卖家可用资金。调用成功后,支付服务将支付订单修改为完成状态,完成支付。
当支付和账务服务二阶段都调用完成后,整个分布式事务结束。