TCC模型
一、什么是TCC模型
TCC是try confirm cancel的单词首字母缩写,是一个类似2pc理论的柔性分布式事务处理的解决方案
ps:
1.什么是分布式事务处理?
分布式系统是把一个应用系统拆分解到各个块进行独立运行部署,当我们的部署服务在各个区块执行的时候,需要服务与服务之间进行远程协作完成事务的操作,这种通过网络连接完成分布式系统的事务处理任务的事务,称为分布式事务。
2.什么是2pc理论?
2pc是指两阶段提交协议,就是把整个事务流程分为两个部分,一部分是准备阶段(Prepare)另一部分是提交阶段(Commit)
原理:
准备阶段:开始,事务的管理者会给每个参与者发送Prepare的消息,并写入本地数据日志,但是此时事务并没有提交。
提交阶段:当事务管理器收到参与者执行失败、或者执行超时了的信号时,事务管理器会直接给每个参与者发送回滚信号(RollBack);否则,事务管理器将对每个参与者发送提交的消息;参与者则根据事务管理器的指示进行提交信息或者进行回滚操作,并且在最后阶段要释放之前占有的资源。
二、TCC模型核心
如图:
Try操作:对业务进行检查,比如检查数据库资源是否充足,然后在业务隔离层隔离业务活动需要的资源;
Confirm操作:这个操作的前提是Try操作成功执行,这一步是执行业务,并且无需检查资源情况,直接使用Try操作隔离预留的资源;
Cancel操作:执行这个操作是因为Try操作失败,释放掉Try操作预留的资源;
三、TCC模型原理
TCC模型主要分为三个部分:主服务、从服务和全局事务管理器
原理:
服务与服务之间通过请求/响应的同步通信机制进行交互;
主服务是提供对外接口,接收客户端请求,并且发起一个全局的业务活动并编排所有的事务参与者;
从服务是全局事务的参与者,提供Try、Confirm、Cancel三个接口,通过调用这些接口来使从服务的事务完成;
全局事务管理器是整个分布式事务的协调者,记录着全局事务管理的执行日志和事务状态,在Try操作阶段完成后根据成功与否调动Confirm或者Cancel接口,全局事务管理器是一个单独的服务。
四、TCC模型异常处理
通常有三种异常处理:空回滚、幂等、悬挂
空回滚:在没有执行Try 操作的情况下,调用 Cancel 操作,Cancel 方法需要识别出这是一个空回滚,然后直接返回成功;
主要是因为分支事务所在的服务异常或网络异常,进而使调用记录为失败;也就是说,如果执行了Try操作就正常进行回滚,如果没有执行Try操作,那就是执行空回滚;执行了Try操作事务日志里会存在记录,Cancel操作可以根据有无记录判断是否为空回滚。
幂挂:确保 Confirm提交重试机制不会引发数据不一致,要求 TCC Try、Confirm 和 Cancel 接口保证幂等,这样不会重复使用或者释放资源。
悬挂: 就是Cancel 操作比 Try 操作先执行;
在全局事务管理器调用分支事务 的Try 操作时,是先注册分支事务,再执行全局事务管理器调用,如果此时全局事务管理器调用的网络发生拥堵,通常全局事务管理器调用是有超时时间的,全局事务管理器超时以后,就会回滚该分布式事务,可能回滚完成之后,全局事务管理器请求才到达参与者真正执行,而一个 Try 方法预留的业务资源,只有该分布式事务才能使用,则Try操作留出来的资源无法被利用造成悬挂。