分布式事务

9/14/2022

微服务,分布式大行其道。

然而实现可靠的分布式系统却并不简单。

分布式事务的概念多,有些名词在不同场景代表的是不同含义。

单从理论来学习分布式事务,未免晦涩枯燥,且无法落地。

因此本系列将从几个实际场景出发,逐步推导出可靠方案,然后再辅以理论层面上的总结。

# A.实现方式

常用的有三种

  • 幂等设计
  • 本地消息
  • TCC

不可能使用的方式

  • XA
  • 三阶段提交

# 1.幂等设计

适用场景一般要满足两个条件

  • 业务最终必定成功,不需要回滚
  • 业务自带重试的场景

# 2.本地消息

本地消息是幂等设计的补充,适用条件:

  • 不需要回滚(同幂等设计)
  • 业务不带重试逻辑,需要开发者来保证后续重试逻辑

# 3.TCC

TCC应用场景最少。适用于

  • 允许回滚的场景
  • 需要本地消息方式做支撑

# B.技术支撑

  • 分布式锁
  • 乐观锁
  • 悲观锁
  • 数据库事务(包括 MySQL事务和Redis事务)

这里没有列出MQ,因为MQ并不是分布式事务的必要元素,没有MQ也能保证分布式事务。

# C.实践场景

  1. 可靠的分布式锁和应用场景
  2. 幂等设计 - 一个领奖的案例
  3. 本地消息 - 直播间送礼事件入MQ
  4. TCC - 一个多账户扣费的案例
  5. MQ消息的可靠性和幂等