zoukankan      html  css  js  c++  java
  • TCC、XA 、DTP区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11623047.html

    TCC的优缺点

    优点

    解决了跨服务的业务操作原子性问题,例如组合支付、下订单减库存等场景非常实用
    TCC的本质原理是把数据库的二阶段提交上升到微服务来实现,从而避免数据库二阶段中锁冲突的长事务引起的低性能风险
    TCC异步高性能,它采用了try先检查,然后异步实现confirm,真正提交是在confirm方法中

    缺点

    对微服务的侵入性强,微服务的每个事务都必须实现try、confirm、cancel等3个方法,开发成本高,今后维护改造的成本也高
    为了达到事务的一致性要求,try、confirm、cancel接口必须实现幂等性操作
    由于事务管理器要记录事务日志,必定会损耗一定的性能,并使得整个TCC事务时间拉长,建议采用Redis的方式来记录事务日志

    TCC与XA 2PC区别

    XA协议是由X/Open组织提出的一个分布式事务处理规范,目前MySQL中只有InnoDB存储引擎支持XA协议。

    在XA规范之前,存在着一个DTP模型,该模型规范了分布式事务的模型设计。

    DTP规范中主要包含了AP、RM、TM三个部分,其中AP是应用程序,是事务发起和结束的地方;RM是资源管理器,主要负责管理每个数据库的连接数据源;TM是事务管理器,负责事务的全局管理,包括事务的生命周期管理和资源的分配协调等。

    XA则规范了TM与RM之间的通信接口,在TM与多个RM之间形成一个双向通信桥梁,从而在多个数据库资源下保证ACID四个特性。

    • XA是数据库的分布式事务,强一致性,在整个过程中,数据一张锁住状态,即从prepare到commit、rollback的整个过程中,TM一直把持折数据库的锁,如果有其他人要修改数据库的该条数据,就必须等待锁的释放,存在长事务风险。
    • TCC是业务的分布式事务,最终一致性,不会出现长事务的锁风险,try是本地事务,锁定资源后就提交事务,confirm/cancel也是本地事务,可以直接提交事务,所以多个短事务不会出现长事务的风险。

    TCC与DTP区别

    TCC模型的发起方类似于DTP模型的AP,TCC模型的接收方类似于DTP模型的RM

    TCC模型中发起方(比如订单服务)调用接收方(比如库存服务,账户服务,积分服务),而DTP模型是由AP应用操作多个RM数据库

    两者都实现了2PC

    TCC模型:第一阶段由发起方(订单服务)发出try请求,第二阶段由事务管理器发起confirm/cancel请求,而且采用了异步实现

    DTP模型:RM(数据库)提供了prepare/commit/rollback接口,两阶段都是由TM调用

    Reference

    https://time.geekbang.org/column/article/127527

  • 相关阅读:
    剑指offer4:重建二叉树(后序遍历)
    剑指offer3:从尾到头打印链表每个节点的值
    剑指offer2:C++实现的替换空格(字符中的空格替换为“%20”)
    tp5系统变量输出(可以用来传递搜索的参数)
    Ajax实现文件上传的临时垃圾文件回收策略
    php获取当天的开始时间和结束时间
    Think PHP递归获取所有的子分类的ID (删除当前及子分类)
    tp查找某字段,排除某字段,不用一次写那么多
    git-查看历史版本及回滚版本
    dedecms目录结构,非常全
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11623047.html
Copyright © 2011-2022 走看看