目录

分布式事务

分布式事务简介

理论基础

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模式