Skip to content

Commit ca39034

Browse files
代码风水师代码风水师
authored andcommitted
1.添加了2PC协议的配图;2.添加了TCC讲解。
1 parent c1d0df0 commit ca39034

3 files changed

Lines changed: 38 additions & 8 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
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 篇) 精讲:设计分布式锁

resource/markdown/distribution/2PCand3PC.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
**两阶段提交协议** 是指事务提交的过程分为两个阶段:**准备阶段****提交阶段**。其中事务的发起者称为 **事务协调者** ,事务的执行者称为 **参与者**。一般,在一个事务中有一个事务协调者和多个参与者。
66

7-
![2PC]()
7+
![2PC](https://i.loli.net/2019/01/16/5c3f3a888ca74.png)
88

99
#### 阶段一:准备阶段:
1010

@@ -26,17 +26,21 @@
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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
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

@@ -12,4 +24,18 @@
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+
阿里技术

0 commit comments

Comments
 (0)