概念定义
TCC其实也算是一种二段提交的实现,具体如下:
Try: 尝试执行业务
- 完成所有业务检查(一致性)
- 预留必须业务资源(准隔离性)
Confirm: 确认执行业务
- 真正执行业务
- 不作任何业务检查
- 只使用Try阶段预留的业务资源
Confirm:操作满足幂等性
Cancel: 取消执行业务
释放Try阶段预留的业务资源
Cancel操作满足幂等性
例子
表设计:
列 | 解析 |
---|---|
userId | 用户ID |
coin | 游戏币 |
frozenCoin | 冻结的游戏币(预充值、预扣减) |
情景1:游戏内用户使用游戏币购买道具。
|
|
情景2:游戏内用户充值游戏币。
|
|
通过以上行为,显然,如果cancel失败呢?数据是否不一致?(confirm也可以采取以下方式做出处理)
- 异常重试(不容忍失败:强一致性)
- (事务)队列+定时补偿(可容忍失败:最终一致性)