Mamba spirit

Gra55

愿背井离乡、追寻梦想的你归来仍是少年

分布式事务:TCC

2PC 是资源层面的分布式事务,TCC 是业务层面的分布式事务

gra55

1-Minute Read

2019年9月4日迪士尼晚上的烟火表演,媳妇拍摄于上海迪士尼

什么是分布式?

  • 与分布式对立的概念是单体系统,分布式系统是将不同的功能模块拆分成不同的服务,微服务就是一个典型的分布式系统。

分布式事务常见解决方案:

  • 2PC两段提交协议
  • 3PC三段提交协议(弥补两端提交协议缺点)
  • TCC或者GTS(阿里)
  • 消息中间件最终一致性
  • 使用LCN解决分布式事物,理念“LCN并不生产事务,LCN只是本地事务的搬运工”。

0x00 TCC

TCC 是 Try、Confire、Cancel 的缩写。

又称补偿机制,核心思想是:针对每个操作(Try)都要注册一个与其对应的确认(Confirm)和补偿(Cancel)操作。

0x01 5 个步骤

①、向协调者发起开启事务请求

②、Try 阶段:Try 阶段负责把所有服务的业务资源预留和锁住。类似于 MySQL DML 操作,会加行锁

③、Confirm or Cancel 阶段:如果 Try 阶段涉及的所有服务都确认执行成功,则向协调者发送 Confirm(commit),否则发送 Cancel(rollback)

④、协调者根据业务发送的 Confirm or Cancel,向所有服务发送相应的 Confirm or Cancel 请求

⑤、各服务提交本地事务

                         +----------------------+       1        +------------------------+
                         |                      +--------------->+                        |
                         |         APP          |                |  Coordination service  |
                         |                      +--------------->+                        |
                         +-+--+--+------+--+--+-+       3        +------------------------+
                           |  |  |      |  |  |
               2           |  |  |      |  |  |              2
  +------------------------+  |  |      |  |  +--------------------------+
  |             4             |  |      |  |              4              |
  |  +------------------------+  |      |  +--------------------------+  |
  |  |           4'              |      |                4'           |  |
  |  |    +----------------------+      +-------------------------+   |  |
  |  |    |                                                       |   |  |
  v  v    v                                                       v   v  v
+-+--+----+-------------------------+       +---------------------+---+--+-+
|            service A              |       |           service B          |
+----------------------+------------+       +-------+----------------------+
                       |                            |
                     5 |                            | 5
                       v                            v
                 +-----+-------+                +---+---------+
                 |    DB 1     |                |    DB 2     |
                 +-------------+                +-------------+

与 2PC 比较:

2PC 是资源层面的分布式事务,强一致,整个操作中资源一直被加锁,不需要开发者参与。

TCC 是业务层面的分布式事务,需要开发人员自己来实现,最终一致性,不需要一直给资源加锁。补偿性事务。

Note:

  • TCC 不需要对资源加锁,所以性能比 2PC 好,但是需要额外开发 3 个接口(Try、Confirm、Cancel)。
  • Confirm 和 Cancel 可能会被多次调用,所以必须是幂等的。

参考:

📌 分布式事务—TCC原理

Recent Posts

Categories

About

Ordinary but not mediocre, fighting