美文网首页
003 分布式事务实现 | TCC原理描述

003 分布式事务实现 | TCC原理描述

作者: __destory__ | 来源:发表于2019-03-05 10:04 被阅读0次

    考虑如下场景,用户新增订单,从账户减去相应的钱数,增加对应的用户积分,如此流程,订单,账户,积分,有三个不同的数据库构成,因此,如果实现分布式事务的效果,除了采用Atomikos之外,还可以采用TCC的方式,

    TCC=Try Confirm Cancel

    Try,尝试着去做,尝试生成一个订单,尝试从用户账号中减去钱数,尝试给用户增加一定的积分,
    Confirm,确定,将尝试的结果,变成最终结果,
    Cancel,删除尝试的内容,

    订单系统的TCC

    • Try,可以生成一个新订单,给予paying的状态,即,通过状态来标记订单正处于支付过程。
    • Confirm,订单状态更改,paying->payed
    • Cancel,删除该订单,或者订单状态更改为 new,回归到订单最终新建状态,对于new状态,后续可以重新支付,除非用户cancel掉订单,将其改成canceled即可。

    账号系统的TCC,假定以后账户数据,id=1,amount=100,订单费用10

    • Try,直接从amount上减去10?,no,直接减去,没办法cancel了,增加pre_amount字段,给予-10的值,这样用户总账号为amount+pre_amount=90元
    • Confirm,update amount=amount+pre_amount, pre_amount=0 where id=1
    • Cancel,直接update pre_amount=0 where id=1 即可。

    积分系统的TCC,同账号系统TCC实现方式。

    总结,TCC的方式,就是通过业务逻辑的方式,借助额外的状态,或者字段等等,完成操作的预先执行,等到没有问题后确认生效,如果出现问题,则将预先执行的数据删除掉。

    国内很多开源的系统支持TCC分布式框架,比如ByteTCCtcc-transactionhimly,可以和spring cloud,dubbo等结合使用,实现TCC效果

    阿里的Fescar也开源了,可以实现TCC

    相关文章

      网友评论

          本文标题:003 分布式事务实现 | TCC原理描述

          本文链接:https://www.haomeiwen.com/subject/mhgwuqtx.html