分布式事务简介
理论基础
2PC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1.prepare ┌─────────┐ 1.prepare
┌─────────────┤ ├────────────┐
│ 2.ok/fail │ TM │ 2.ok/fail │
│ ┌────────►│ │◄───────┐ │
│ │ └─┬────┬──┘ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ 3.commit│ │ 3.commit │ │
│ │ /rollback │ /roolback│ │
│ │ │ │ │ │
│ │ │ │ │ │
▼ │ │ │ │ ▼
┌────┴───┐ │ │ ┌─────┴────┐
│ │◄──────┘ └────►│ │
│ RM │ │ RM │
│ │ │ │
└────────┘ └──────────┘
|
两阶段RM协议(2PC,Two Phase Commitment Protocol),事务管理器(协调者,TM)分两个阶段来协调资源管理器(参与者,RM):
- 第一阶段准备资源 是预留事务所需的资源。协调者节点向所有参与者节点询问是否可以执行提交操作。
- 第二阶段提交执行 分为两种情况
- 若参与者全部预留资源成功,则全局提交事物
- 若存在某些参与者资源预留失败,则全局回滚
TCC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
┌──────────────────┐ ┌─────────────────────┐
│ │ │ │
│ TM │ ┌─┼─►try ┌────────┐ │
│ │ │ │ │ │ │
│ ┌────────┐ │ ┌───┼─┼─►confirm │service1│ │
│ │ │ │ │ │ │ │ │ │
│ │ step 1 ├─────┼─┼───┤ │ cancel └────────┘ │
│ │ │ │ ├───┼─┼─► │
│ └────────┘ │ │ │ └─────────────────────┘
┌───────┐ │ │ │ │
│ start ├────►│ │ │ │
└───────┘ │ │ │ │ ┌─────────────────────┐
│ ┌─────────┐ │ │ │ │ │
│ │ │ │ │ └─┼─►try ┌────────┐ │
│ │ step 2 │ │ │ │ │ │ │
│ │ ├────┼─┼─────┼─►confirm │service1│ │
│ └─────────┘ │ │ │ │ │ │
│ │ └─────┼─►cancel └────────┘ │
│ │ │ │
└──────────────────┘ └─────────────────────┘
|
TCC(Try-Confirm-Cancel)是服务具体化的2PC约定,业务需要实现三个操作:
- Try 尝试预留资源
- Confirm 业务提交
- Cancel 释放预留资源
Sage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
normal trans compensating trans
┌────────────┐ ┌────────────┐
│ │ │ │
│ T1 │ │ C1 │
│ │ │ │
└──────┬─────┘ └─────▲──────┘
│ │
│ │
┌──────▼─────┐ ┌─────┴──────┐
│ │ │ │
│ T2 │ │ C2 │
│ │ │ │
└──────┬─────┘ └─────▲──────┘
│ │
│ fail │
├───────────────────────────►│
│ │
┌──────▼─────┐ ┌─────┴──────┐
│ │ │ │
│ T3 │ │ C3 │
│ │ │ │
└────────────┘ └────────────┘
|
Sage是一种补偿协议,在分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。
Seata框架
Seata(Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架),Seata中主要的三大模块为:
- 事务协调者(TC,Transaction Coordinator) 维护全局和分支事务的状态,驱动全局事务提交或回滚。
- 事务管理器(TM,Transaction Manager) 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
- 资源管理器(RM,Resource Manager) 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中 TM、RM 作为客户端与业务集成,TC为服务端单独部署。
AT模式
AT模式是一种无侵入的分布式事务解决方案。在 AT 模式下,Seata 框架会自动生成事务的二阶段提交和回滚操作。
TCC模式
Sage模式