随着互联网浪潮不断向前推进,企业不得不面对大规模的互联网请求,在当今的互联网发展中,新兴起的微服务架构的模式不断被创新和应用,而在微服务基础当中,事物问题尤为突出,不能解决事物的问题,那么整个微服务都是虚谈,根本无从说起,本篇文章主要讲解个人对于微服务中分布式事物TCC的见解。
首先,所谓的TCC, Try Confirm Cancel,分别对应着确认一个事物完成的简单三个过程,尝试做某件事、确认做某件事、补充的取消做某件事,因为在分布式的事物当中,可能完成一件事情的过程由多个应用一起来完成,那么传统的单机性质的数据库事物已经不能支持多个应用,或者说完成这件事情所涉及的表由多个数据库组成,那么为了保证一致性、原子性,需要将这件事情进行分解,然后再组合起来的方式来共同完成。那么跟TCC相对于的一些其他的解决性方案还有:可靠事件模式(事件的发送和接收保障高可靠性来实现事物一致性)、补偿模式(如果确认失败,全部逆向取消)。
TCC,仔细观察,其由三部曲组成,回想一下数据库的三部曲:DML、Commit、rollback.这之间是有异曲同工之妙的,try的操作能够必须要能够保证后面的commit以及rollback没有问题,也就是try必须执行成功才能执行后续操作,字面意思即是要使得相对应的资源必须可用,并且锁住,然后才有后续的comfirm,comfirm的操作需要有其他的事件来通知,执行confirm操作,相对应的,假如confirm失败,就需要rollback操作,操作的内容与try相反,但是实际的业务的时候,可能会有稍微区别,只要是释放资源以及做其他的相关通知等。
TCC操作事情:
1、Try:尝试执行业务。
- 完成所有业务检查(一致性)
- 预留必须业务资源(准隔离性)
- 真正执行业务
- 不做任何业务检查
- 只使用Try阶段预留的业务资源
- 释放Try阶段预留的业务资源
- 其他事件消息等通知