第4章 数据复制与一致性

复制架构、一致性模型、逻辑时钟,以及 BASE 与 CRDT。

下载本章 PDF

4.1 复制的意义

1. 知识点论述

「4.1 复制的意义」是《分布式计算系统》一致性部分的核心知识点。解释多副本如何读、如何冲突判定,以及强弱一致如何取舍。本知识点首先把握:高可用:一个节点坏了,其他副本继续服务。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

10 分钟搞懂 CAP:副本、可用性与分区

在B站观看

3. 知识点详解

  1. 高可用:一个节点坏了,其他副本继续服务。
  2. 低延迟:副本靠近用户。
  3. 扩展:多副本分担读请求。

4. 应用场景

  • 多活机房提高可用性。
  • 就近读副本降低延迟。
  • 读多写少业务用副本分担读流量。

4.2 复制架构

1. 知识点论述

「4.2 复制架构」是《分布式计算系统》一致性部分的核心知识点。解释多副本如何读、如何冲突判定,以及强弱一致如何取舍。本知识点首先把握:主从:主节点处理写,从节点同步并承担部分读。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

读写分离与主从复制:异步、半同步、binlog

在B站观看

3. 知识点详解

  1. 主从:主节点处理写,从节点同步并承担部分读。
  2. 分片加复制:数据先拆开,每个分片再指定主分片负责写,副本可跨区域。

4. 应用场景

  • MySQL 主从、Kafka ISR、云数据库跨区副本。
  • 分片加复制:每个分片独立主从。
  • 写路径与读路径分离设计。

4.3 一致性阶梯

1. 知识点论述

「4.3 一致性阶梯」是《分布式计算系统》一致性部分的核心知识点。解释多副本如何读、如何冲突判定,以及强弱一致如何取舍。本知识点首先把握:线性一致性:所有操作像发生在一条与真实时间兼容的全局时间线上。实现依赖共识或带误差界的全局时间,如 Spanner 的 TrueTime。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

简单理解顺序一致性、线性一致性

在B站观看

3. 知识点详解

  1. 线性一致性:所有操作像发生在一条与真实时间兼容的全局时间线上。实现依赖共识或带误差界的全局时间,如 Spanner 的 TrueTime。
  2. 顺序一致性:所有进程看到相同的写顺序,不要求符合墙钟。全序广播是常见实现手段。
  3. 因果一致性:只约束有因果关系的写。向量时钟用来识别因果和并发。
  4. 最终一致性:允许暂时分歧,停止更新后副本收敛。CDN 和购物车常用。
  5. 一致性越强,延迟和可用性代价通常越高。订单要强一致,推荐可以最终一致。

4. 应用场景

  • 金融转账选强一致;推荐列表可用最终一致。
  • Spanner/TrueTime 场景理解线性一致代价。
  • 产品设计时明确一致性 SLA。

4.4 逻辑时钟

1. 知识点论述

「4.4 逻辑时钟」是《分布式计算系统》一致性部分的核心知识点。解释多副本如何读、如何冲突判定,以及强弱一致如何取舍。本知识点首先把握:Lamport 时钟:收到消息后把自己的时钟拨到不小于对方,再加一。C(a) < C(b) 不能证明 a 在真实时间上先发生。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

偏序关系与 Lamport 时钟

在B站观看

3. 知识点详解

  1. Lamport 时钟:收到消息后把自己的时钟拨到不小于对方,再加一。C(a) < C(b) 不能证明 a 在真实时间上先发生。
  2. 向量时钟:每个进程一个分量。可以判断先后,也可以判断两个事件并发。
  3. 冲突检测:同一数据的两个更新,若向量不可比,就是并发冲突,需要合并规则。

4. 应用场景

  • 版本向量检测并发写冲突。
  • 因果消息定序、协作编辑的冲突合并。
  • 分布式追踪中理解“逻辑先后”不等于墙钟先后。

4.5 客户端一致性与 BASE、CRDT

1. 知识点论述

「4.5 客户端一致性与 BASE、CRDT」是《分布式计算系统》一致性部分的核心知识点。解释多副本如何读、如何冲突判定,以及强弱一致如何取舍。本知识点首先把握:读己之写:用户随后的读至少能看见自己刚写的值。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

大白话聊聊 BASE 最终一致性

在B站观看

3. 知识点详解

  1. 读己之写:用户随后的读至少能看见自己刚写的值。
  2. BASE:基本可用、软状态、最终一致。
  3. CRDT:副本可独立更新再合并。;状态型:传播完整状态,用合并函数收敛。;操作型:传播操作,操作本身可交换或可收敛。

4. 应用场景

  • 购物车、点赞计数可用 CRDT 或最终一致方案。
  • 读己之写保证用户刷新立即看到自己的提交。
  • BASE 系统在可用与一致之间显式取舍。

本章练习(15 题)

1. 复制带来的高可用是指?

2. 把副本放到离用户近的地方,主要改善?

3. 多个副本还可以用来?

4. 主从复制里,写通常由谁处理?

5. 分片加复制的顺序是?

6. 从节点承担读请求时要面对的是?

7. 线性一致性要求?

8. 顺序一致性与线性一致性的差别是?

9. 一致性越强,通常的代价是?

10. Lamport 时钟里 C(a) < C(b) 说明?

11. 向量时钟相对 Lamport 时钟的关键能力是?

12. 两个更新的向量时钟不可比时,应当?

13. 读己之写保证?

14. BASE 中的最终一致是指?

15. 状态型 CRDT 如何收敛?