分布式事务的由来和TCC的核心思想和工作流程
写在前面
分布式事务是一个大的命题,有很多相关的技术和细节。网上介绍这个主题的文章也是多如牛毛,但是能把问题的来龙去脉给讲清楚的文章并不多。
我也不敢说自己就一定能够把这个本来就很复杂的事情讲的有多通透。不过技术教学相长,知识常看常新。做一些努力将这个问题系统性地梳理二三也算是对自己日常的学习和工作做一点沉淀吧。
本系列文章计划是写系列文章来介绍TCC这一分布式事务在应用层的实现方案,包含下面几个主题:
- 分布式事务的由来和TCC的核心思想和工作流程
- TCC的异常处理方案
- TCC的各种优化方案
引子
系统初期一般都是单体应用架构(也即所谓的Monolith型应用),此时系统的所有业务服务都由少数几个系统对外提供。随着业务发展,单体应用会逐渐臃肿成为大杂烩,且系统内部耦合严重,牵一发而动全身。此时一般会针对应用提供的功能进行垂直拆分,实现应用的轻量化和微服务化。
由于原来的应用被拆分为数个微服务,原来的系统内部调用现在就不可避免的成为了分布式环境下的网络调用。因此一个简单的服务调用也会面临分布式环境下的一系列挑战:
- 网络可靠性问题
- 数据一致性问题
- 高可用以及灾备问题
针对每个问题都有各自的解决方案,本文主要聚焦于数据一致性问题。
分布式事务是解决分布式环境下的数据一致性问题的一种规范。而本文要讨论的TCC则是分布式事务的一种实现方案。
TCC是什么
TCC指的是一种资源,它是实现了Try-Confirm-Cancel这三个操作的