TCC

XA协议包含两阶段提交(Two-phase Commit,2PC)和三阶段提交(3PC)两种实现

2PC、3PC还有TCC都蛮相似的。 
3PC大致是把2PC的第一阶段拆分成了两个阶段, 
而TCC我感觉是把2PC的第二阶段拆分成了两个阶段。

TCC又称补偿事务。其核心思想是:"针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)"。它分为三个操作:

  1. Try阶段:主要是对业务系统做检测及资源预留。
  2. Confirm阶段:确认执行业务操作。
  3. Cancel阶段:取消执行业务操作。

TCC对应 Try、Confirm、Cancel 三种操作可以理解成关系型数据库事务的三种操作:DML、Commit、Rollback。

在一个跨应用的业务操作中 
Try:Try操作是先把多个应用中的业务资源预留和锁定住,为后续的确认打下基础,类似的,DML操作要锁定数据库记录行,持有数据库资源。 
Confirm:Confirm操作是在Try操作中涉及的所有应用均成功之后进行确认,使用预留的业务资源,和Commit类似; 
Cancel:Cancel则是当Try操作中涉及的所有应用没有全部成功,需要将已成功的应用进行取消(即Rollback回滚)。其中Confirm和Cancel操作是一对反向业务操作。

总结

TCC 实质上是应用层的2PC(),好比把 XA 两阶段提交那种在数据资源层做的事务管理工作提到了数据应用层。

2PC是资源层面的分布式事务,是强一致性,在两阶段提交的整个过程中,一直会持有资源的锁

TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁

TCC相比较于2PC来讲性能会好很多,但是因为同时需要改造try、confirm、canel3个接口,开发成本高。

posted @ 2019-11-22 13:25  要好好吃饭  阅读(852)  评论(0编辑  收藏  举报