DTS(Distributed Transaction Service)框架是由支付宝在X/OpenDTP模型的基础上改进的一个设计,定义了类似2PC的标准两阶段接口,业务系统只需要实现对应的接口就可以使用DTS的事务功能。DTS最大的特点是放宽了数据库的强一致约束,保证了数据的最终一致性。

    1)具体的流程是
    支付宝的DTS架构 - 图1
    TCC分为三个阶段TRYING-CONFIRMING-CANCELING。每个阶段做不同的处理。
    TRYING、CONFIRMING、CANCELIING大致可以理解为SQL事务中的LOCK、COMMIT、ROLLBACK
    TRYING 阶段主要是对业务系统做检测及资源预留
    CONFIRMING 阶段主要是对业务系统做确认提交,TRYING阶段执行成功并开始执行CONFIRMING阶段时,默认 CONFIRMING阶段是不会出错的。即:只要TRYING成功,CONFIRMING一定成功。
    CANCELING 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
    以上所有的操作需要满足幂等性,幂等性的实现方式可以是:
    1、通过唯一键值做处理,即每次调用的时候传入唯一键值,通过唯一键值判断业务是否被操作,如果已被操作,则不再重复操作
    2、通过状态机处理,给业务数据设置状态,通过业务状态判断是否需要重复执行

    2)如何更通俗的理解TCC事务模型
    支付系统接收到会员的支付请求后,需要扣减会员账户余额、增加会员积分(暂时假设需要同步实现)增加商户账户余额
    会员系统、商户系统、积分系统是独立的三个子系统,无法通过传统的事务方式进行处理。
    TRYING阶段:我们需要做的就是会员资金账户的资金预留,即:冻结会员账户的金额(订单金额)
    CONFIRMING阶段:我们需要做的就是会员积分账户增加积分余额,商户账户增加账户余额
    CANCELING阶段:该阶段需要执行的就是解冻释放我们扣减的会员余额

    3)开源的tcc框架
    tcc-transaction
    bytetcc