为什么要有可用余额字段? 为什么是可用金额, 而不是预留金额/冻结金额?
在分布式事务 TCC 中 T 阶段要先锁住金额以便事务失败回滚时不会出现金额被取走导致回滚失败出现负账。
T:账户+入账,预留+入账 C:预留-入账 R:账户-入账,预留-入账
T:预留+出账 where 账户-预留>出账 C:账户-出账,预留-出账 R:预留-出账
T:账户+入账 C:可用+入账 R:账户-入账
T:可用-出账 where 可用>出账 C:账户-出账 R:可用+出账
可以看出可用余额模式要简单得多。
在实现中还需要预留金额表记录未完成的预留金额明细,以便知道冻结的金额明细是处于什么状态。