File tree Expand file tree Collapse file tree
resource/markdown/distribution Expand file tree Collapse file tree Original file line number Diff line number Diff line change 118118* [ 分布式系统 (第 02 篇) 精讲:CAP定理与BASE理论] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/distribution/CAPandBASE.md )
119119* [ 分布式系统 (第 03 篇) 精讲:X/Open DTP 与 XA 事务] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/distribution/XA.md )
120120* [ 分布式系统 (第 04 篇) 精讲:2PC协议和3PC协议] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/distribution/2PCand3PC.md )
121- * 分布式系统 (第 05 篇) 精讲:TCC事务补偿机制(柔性事务方案)
121+ * [ 分布式系统 (第 05 篇) 精讲:TCC事务补偿机制(柔性事务方案)] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/distribution/TryConfirmCancel.md )
122122* 分布式系统 (第 06 篇) 精讲:Paxos算法(强一致性算法)
123123* 分布式系统 (第 07 篇) 精讲:Chubby 与 Zookeeper
124124* 分布式系统 (第 08 篇) 精讲:设计分布式锁
Original file line number Diff line number Diff line change 44
55** 两阶段提交协议** 是指事务提交的过程分为两个阶段:** 准备阶段** 和 ** 提交阶段** 。其中事务的发起者称为 ** 事务协调者** ,事务的执行者称为 ** 参与者** 。一般,在一个事务中有一个事务协调者和多个参与者。
66
7- ![ 2PC] ( )
7+ ![ 2PC] ( https://i.loli.net/2019/01/16/5c3f3a888ca74.png )
88
99#### 阶段一:准备阶段:
1010
2626
2727他想通过携程APP进行购买两张票,要么两张票都购买成功,要么两张票都购买失败。
2828
29- ** 过程** :首先用户先通过携程选择杭州到北京、北京到巴黎的机票;如果两个航班都有机票话,然后下单购买两个航班的机票。
29+ ** 过程** :首先用户先通过携程选择杭州到北京、北京到巴黎的机票;如果两个航班都有机票话,然后下单购买两个航班的机票,从杭州到北京的机票是首都航空公司提供,从北京到巴黎的机票是法国航空公司提供 。
3030
3131** 分析** :整个购买两张机票的过程就是一个事务,分别购买两个班次的行为就是两个操作。
3232
3333准备阶段:选择航班机票时就是准备阶段,被选择的航空公司票务系统就是参与者,通过选择机票就是占有资源(占有资源是有时间限制的);
3434
35- ![ 准备阶段] ( )
35+ ![ 准备阶段] ( https://i.loli.net/2019/01/16/5c3f3e5d530ae.png )
36+
37+ 消息反馈:
38+
39+ ![ 反馈] ( https://i.loli.net/2019/01/16/5c3f3e94d2bdd.png )
3640
3741提交阶段:携程作为协调者会查看参与者(各航空公司票务系统)是否可以提供机票,如果都是YES,表示可以提交订单,否则有NO,只能放弃操作(事务回滚),也是放弃对资源的占有。
3842
39- ![ 提交阶段] ( )
43+ ![ 提交阶段] ( https://i.loli.net/2019/01/16/5c3f40464dec3.png )
4044
4145
4246
Original file line number Diff line number Diff line change 11<h3 style =" padding-bottom :6px ; padding-left :20px ; color :#ffffff ; background-color :#E74C3C ;" >TCC事务补偿机制(柔性事务方案)</h3 >
22
3- ** TCC** 是 * Try Confirm-Cancel* 的缩写,其本质上还是2PC(两阶段提交协议)。它不像具有[ ACID特性] ( https://github.com/about-cloud/JavaCore ) 的数据库事务那样刚性 ,TCC也没有XA事务那样 ** 直接依赖** 于资源管理器(RM),它是基于业务层面的事务操作,所以(占有资源的)粒子度是可控的,所以又称为** 柔性事务方案** 。TCC分为两阶段:** Try阶段** 和 ** Confirm/Cancel阶段** 。
3+ ** TCC** 是 * Try Confirm-Cancel* 的缩写,其本质上还是2PC(两阶段提交协议)。它不像具有[ ACID特性] ( https://github.com/about-cloud/JavaCore ) 的数据库事务那样刚性 ,TCC是 ** 柔性事务方案** 。为什么称为柔性事务方案呢?因为它不直接依赖于资源管理(RM),回想一下[ 前面的XA事务] ( https://github.com/about-cloud/JavaCore ) ,其中就直接依赖于资源管理器,而 TCC 是在业务层面处理的,业务依赖于何种资源管理器、依赖多少资源管理器,TCC 中是不需要担心,所以它的方式更为弹性。
4+
5+ ![ TCC] ( https://i.loli.net/2019/01/16/5c3f4b5b2e21d.png )
6+
7+
8+
9+ 一个完整的TCC模式有以下组成部分:
10+
11+ 1、业务应用:直接使用的应用;
12+
13+ 2、被调用的服务:一般是多个,是主业务应用被调用的服务,以此来获得资源;
14+
15+ 3、事务协调器:开启事务、注册事务,协调事务内的服务提交/回滚活动,从而达到全局事务的一致性。
16+
417
5- ![ TCC] ( )
618
719#### 第一阶段:Try阶段:
820
1224
1325#### 第二阶段:Confirm/Cancel阶段:
1426
15- Confirm表示确认执行业务操作,Cancel表示取消执行业务操作。
27+ Confirm表示确认执行业务操作,Cancel表示取消执行业务操作。
28+
29+
30+
31+ #### TCC 这种入侵业务而不接触资源管理器的优缺点如下:
32+
33+ ** 优点:** 资源管理的粒子度可自控,在资源层面可以做到很好的控制;
34+
35+ ** 缺点:** 入侵业务代码,耦合度增加,每个被调用的服务都要重复实现Try、Confirm、Cancel接口代码,改造成本高。
36+
37+
38+
39+ 参考资料:
40+
41+ 阿里技术
You can’t perform that action at this time.
0 commit comments