- 起源 -网络
TCC概念由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出, 在该论文中,TCC仍是以Tentative-Confirmation-Cancellation命名。正式以Try-Confirm-Cancel做为名称的是Atomikos公司,而且还注册了TCC商标。国内最先可查引进TCC概念,应是阿里程立2008年在 软件开发2.0大会 上分享主题《大规模SOA系统中的分布事务处理》中。架构
Atomikos公司在商业版本事务管理器ExtremeTransactions中提供了TCC方案的实现,可是因为其是收费的,所以相应的不少的开源实现方案也就涌现出来,如:ByteTCC、Himly、TCC-transaction。可是笔者都不推荐使用,下文会详细说明。框架
- 组成 -post
TCC 是一种补偿型事务,该模型要求应用的每一个服务提供 try、confirm、cancel 三个接口,它的核心思想是经过对资源的预留(提供中间态,如帐户状态、冻结金额等),尽早释放对资源的加锁,若是事务能够提交,则完成对预留资源的确认,若是事务要回滚,则释放预留的资源。阿里云
TCC模型彻底交由业务实现,每一个子业务都须要实现Try-Confirm-Cancel三个接口,对业务侵入大,资源锁定交由业务方。设计
- Try:尝试执行业务,完成全部业务检查(一致性),预留必要的业务资源(准隔离性)。
- Confirm:确认执行业务,再也不作业务检查。只使用Try阶段预留的业务资源,Confirm操做知足幂等性。
- Cancel:取消执行业务释放Try阶段预留业务资源。
一个完整的业务活动由一个主业务服务与若干子业务服务组成:日志
- 主业务服务负责发起并完成整个业务活动
- 业务服务提供TCC型业务操做。
- 业务活动管理器控制业务活动的一致性,它登记业务活动中的操做,并在业务活动提交时确认全部的TCC型操做的Confirm操做,在业务活动取消时调用全部TCC型操做的Cancel操做。
成本:对象
- 实现TCC操做的成本
- 业务活动结束时Confirm或Cancel操做的执行成本。在Confirm和Cancel范围内的操做成功性须要框架来保证,只能一直重试保证资源被消耗或者释放。
- 业务活动日志成本
适用范围:接口
- 强隔离性、严格一致性要求的业务活动
- 适用于执行时间较短的业务
- TCC与2PC对比 -事务
TCC将事务提交划分红两个阶段,Try即为一阶段,Confirm 和 Cancel 是二阶段并行的两个分支,二选一。从阶段划分上很是像2PC,咱们是否能够说TCC是一种2PC或者2PC变种呢?其实不能够,缘由以下:
- 2PC的操做对象在于资源层,对于开发人员无感知;而TCC的操做在于业务层,具备较高开发成本。
- 2PC是一个总体的长事务,也是刚性事务;而TCC是一组的本地短事务,是柔性事务。
- 2PC的Prepare(表决阶段)进行了操做表决;而TCC的try并无表决准备,直接兼备资源操做与准备能力
- 2PC是全局锁定资源,全部参与者阻塞 交互等待TM通知;而TCC的资源锁定在于Try操做,业务方能够灵活选择业务资源的锁定粒度。
- TCC注意事项 -
TCC为了解决网络不可靠引发的异常状况,要求业务方在设计上要遵循三个策略:
- 容许空回滚:缘由是异常发生在阶段一时,部分参与方没有收到 Try 请求从而触发整个事务的Cancel 操做;Try 失败或者没有执行 Try 操做的参与方收到 Cancel 请求时,要进行空回滚操做。
- 保持幂等性:缘由是异常发生在阶段二时,好比网络超时,则会重复调用参与方的 Confirm/Cancel 方法,所以Confirm/Cancel方法必须保证幂等性。
- 防止资源悬挂:缘由网络异常致使两个阶段没法保证严格的顺序执行,出现参与方侧 Try 请求比 Cancel 请求更晚到达的状况,Cancel 会执行空回滚而确保事务的正确性,可是此时 Try 方法也不能够再被执行。
- 案例 -
汇款服务、收款服务案例:A用户向B用户汇款500元。
- 总结 -
由于TCC对业务的强侵入性,使用成本很是昂贵,虽然提供了更灵活的资源锁粒度,对标2PC拥有更高的吞吐量。可是相对于2PC的强一致性来讲,TCC的实施成本和数据一致性的牺牲带来的相对高吞吐量,整体表现出来的性价比很是低,反而在市面上成熟的大型企业中几乎没有使用。
- 做者介绍 -
孙玄
毕业于浙江大学,奈学教育创始人兼CEO,前转转公司技术委员会主席,前58集团技术委员会主席,前百度资深研发工程师,腾讯云TVP,阿里云MVP,在线直播大课《百万架构师》品牌创始人。
林淮川
毕业于西安交通大学;奈学教育《百万架构师训练营》讲师及企业级源码内源负责人,前大树金融高级架构师;前大树金融技术委员会开创者;前大树金融供应链金融技术总监;前天阳宏业交易事业部技术主管;多年互联网金融行业(ToB)经验。