支付宝蚂蚁金服——基于补偿性
关注人数:69 发布时间:2021-11-07 09:17:05
补偿型 tcc 解决方案的从业务服务与通用型 tcc 方案类似,也需要参与到主业务服务的决策当中。但与通用型 tcc 方案不一样的是,从业务服务只需要提供 do 和 compensate 两个接口:

do 接口直接执行真正的完整业务逻辑,完成业务处理,业务执行结果外部可见。
compensate 操作用于业务补偿,抵消或部分抵消正向业务操作的业务结果,补偿操作需满足幂等性。
▲ 补偿性 tcc 模型
与通用型方案相比,补偿型解决方案的从业务服务只需要在在原有业务逻辑上额外增加一个补偿回滚逻辑即可,业务改造量较小。但业务在一阶段就执行完整个业务逻辑,无法做到有效隔离,可能存在补偿失败的情况,还需要额外的异常处理机制,比如人工介入。
由于存在回滚补偿失败的情况,补偿型 tcc 分布式事务解决方案只适用于一些并发冲突较少的业务或者需要与外部交互的业务,这些外部业务不属于被动型业务,其执行结果会影响主业务服务的决策,比如机票代理商的机票预订服务:
▲ 机票预订业务流程
该机票服务提供多程机票预订服务,可以同时预订多趟行程航班机票,比如从北京到圣彼得堡,需要第一程,从北京到莫斯科,以及第二程从莫斯科到圣彼得堡。
用户想要同时预订这两趟航班的机票,只预订一趟航班对用户来说没有意义。因此对于这样的业务服务同样提出了原子性要求,要么同时成功,要么同时失败,如果其中一趟预订失败,另外一趟也不需要预订。
但是由于航空公司相对于机票代理商来说属于外部业务,只提供订票接口和取消订票接口,想要推动航空公司改造是极其困难的。因此,对于此类业务服务,可以使用补偿型 tcc 分布式事务解决方案,如下:
▲ 机票预订业务的 tcc 流程
在用户预订机票的时候,先调用各航空公司的预订接口,如果两趟航班都预订成功,则整个分布式事务执行成功;一旦某趟航班机票预订失败,则分布式事务回滚,由事务模型框架调用对应航空公司的取消预订接口。通过这种方式,也可以保证多程机票预订服务的原子性。

上一篇:支付宝商家花呗分期免息商品公告
下一篇:支付宝养老金靠谱吗?









