第6章 分布式事务

ACID、隔离级别、并发控制、两阶段提交与典型系统。

下载本章 PDF

6.1 事务与 ACID

1. 知识点论述

「6.1 事务与 ACID」是《分布式计算系统》分布式事务部分的核心知识点。把跨节点操作组织成可提交或可回滚的事务。本知识点首先把握:事务是完成一项任务的操作序列,由开始、操作、提交或中止组成。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

5 分钟看懂数据库事务 ACID

在B站观看

3. 知识点详解

  1. 事务是完成一项任务的操作序列,由开始、操作、提交或中止组成。
  2. 原子性:全部生效或全部不生效。
  3. 一致性:事务把数据从一个正确状态带到另一个正确状态。
  4. 隔离性:并发事务互不看见不该看见的中间状态。
  5. 持久性:提交之后故障也不丢失。

4. 应用场景

  • 转账、下单、库存扣减等业务事务。
  • 用 ACID 对照检查系统保证是否足够。
  • 分布式环境下原子性与持久性更难实现。

6.2 隔离级别

1. 知识点论述

「6.2 隔离级别」是《分布式计算系统》分布式事务部分的核心知识点。把跨节点操作组织成可提交或可回滚的事务。本知识点首先把握:读未提交:可能脏读。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

MVCC 与事务隔离级别是怎么实现的

在B站观看

3. 知识点详解

  1. 读未提交:可能脏读。
  2. 读已提交:避免脏读,仍有不可重复读。
  3. 可重复读:同一行两次读相同,仍可能幻读。
  4. 快照隔离:事务看见开始时的已提交快照。
  5. 可串行化:并发执行等价于某个串行顺序。

4. 应用场景

  • 按业务选择读已提交、可重复读或可串行化。
  • 解释脏读、不可重复读、幻读现象。
  • 快照隔离在分析与在线混合负载中常见。

6.3 并发控制

1. 知识点论述

「6.3 并发控制」是《分布式计算系统》分布式事务部分的核心知识点。把跨节点操作组织成可提交或可回滚的事务。本知识点首先把握:悲观:访问前加锁,锁粒度影响并发,不当加锁会死锁。分布式环境下锁要跨节点。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

悲观锁、乐观锁与 CAS

在B站观看

3. 知识点详解

  1. 悲观:访问前加锁,锁粒度影响并发,不当加锁会死锁。分布式环境下锁要跨节点。
  2. 时间戳排序:用时间戳决定冲突操作谁先谁后。
  3. 乐观:先执行,提交前验证,冲突就放弃重试。
  4. MVCC:写产生新版本,读看自己的版本,读写更容易并发。有多版本两阶段锁和多版本乐观控制。

4. 应用场景

  • InnoDB MVCC、乐观锁秒杀、分布式锁。
  • 读写比例决定悲观/乐观/多版本选型。
  • 跨节点锁放大与死锁需要额外协议。

6.4 两阶段提交

1. 知识点论述

「6.4 两阶段提交」是《分布式计算系统》分布式事务部分的核心知识点。把跨节点操作组织成可提交或可回滚的事务。本知识点首先把握:准备阶段:协调者问参与者能否提交,回答 Yes 的参与者进入就绪并等待。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

两阶段提交与三阶段提交

在B站观看

3. 知识点详解

  1. 准备阶段:协调者问参与者能否提交,回答 Yes 的参与者进入就绪并等待。
  2. 提交阶段:协调者发提交或中止,参与者执行。
  3. 故障:准备阶段参与者崩溃:协调者收不到票。;提交阶段参与者崩溃:恢复后按日志完成决定。;准备或提交阶段协调者崩溃:参与者可能不知道最终决定,从而阻塞。
  4. 与共识的关系:可用 Raft 一类复制状态机持久化协调者的决定,减少单点。

4. 应用场景

  • 跨库转账、跨服务提交。
  • 理解协调者崩溃导致阻塞的风险。
  • 用共识日志固化协调者决定。

6.5 系统案例

1. 知识点论述

「6.5 系统案例」是《分布式计算系统》分布式事务部分的核心知识点。把跨节点操作组织成可提交或可回滚的事务。本知识点首先把握:Spanner:跨地域、跨分片,用 TrueTime 给出提交顺序。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

解读 Spanner:跨地域分布式事务

在B站观看

3. 知识点详解

  1. Spanner:跨地域、跨分片,用 TrueTime 给出提交顺序。
  2. Calvin:先对一个批次的事务确定性排序,再执行,减少运行时协调。
  3. Anna:无中心协调,换取高可用。
  4. GeoGauss:多主、乐观处理跨地域并发更新。

4. 应用场景

  • 对照 Spanner/Calvin 等论文系统理解不同权衡。
  • 多地域事务与时钟、排序、乐观并发的关系。
  • 为云数据库选型提供参照。

本章练习(15 题)

1. 原子性是指?

2. 隔离性要防止的是?

3. 持久性是指?

4. 读未提交允许?

5. 可重复读仍可能出现?

6. 可串行化要求?

7. 悲观并发控制的特点是?

8. 乐观并发控制在冲突时?

9. MVCC 为什么能让读写更容易并发?

10. 参与者在准备阶段回答 Yes 之后?

11. 协调者在参与者准备好之后崩溃,可能导致?

12. 用 Raft 一类复制状态机持久化协调者的决定,是为了?

13. Spanner 用 TrueTime 来?

14. Calvin 相对传统两阶段提交的思路是?

15. Anna 和 GeoGauss 的差别可以概括为?