第3章 数据划分与定位

静态/动态划分、数据定位、一致性哈希与 GFS。

下载本章 PDF

3.1 为什么划分

1. 知识点论述

「3.1 为什么划分」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:目的:集群变大时,容量和算力一起变大。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

为什么需要分库分表?怎么分、哪些数据要分

在B站观看

3. 知识点详解

  1. 目的:集群变大时,容量和算力一起变大。
  2. 目标:数据并行存储和处理,同时避免负载倾斜。
  3. 热点:某个键或某一段键被频繁访问,再好的划分也会打在同一分区上。

4. 应用场景

  • 数据量与访问量随业务增长,必须按键/范围切分。
  • 热点键识别与打散是容量规划的关键。
  • 分库分表、对象存储分片都依赖划分策略。

3.2 静态划分

1. 知识点论述

「3.2 静态划分」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:范围划分:一段连续键值一个分区,适合区间扫描,边界要事先算好。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

有限内存如何支撑无限数据:数据切分与哈希槽

在B站观看

3. 知识点详解

  1. 范围划分:一段连续键值一个分区,适合区间扫描,边界要事先算好。
  2. 哈希划分:用哈希把键打散,减轻热点,区间查询变贵。
  3. 其他:无分区、列表分区。
  4. 取模划分的问题:节点数一变,绝大多数键都要搬家。

4. 应用场景

  • 范围划分适合区间扫描(如时间序列)。
  • 哈希划分适合均匀随机访问。
  • 避免简单取模,以免扩容时大规模迁移。

3.3 动态调整

1. 知识点论述

「3.3 动态调整」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:数据规模变化后要重新划分并迁移。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

256 变 4096:分库分表扩容如何平滑迁移

在B站观看

3. 知识点详解

  1. 数据规模变化后要重新划分并迁移。
  2. 小分区作为迁移粒度:限定分区数量。;限定分区大小。;限定分区比例。
  3. 节点增减时搬的是小分区,而不是重算全部映射。

4. 应用场景

  • 在线扩容:把小分区迁到新节点。
  • 弹性云数据库按负载自动分裂/合并分区。
  • 迁移粒度设计直接影响停机窗口与可用性。

3.4 数据定位

1. 知识点论述

「3.4 数据定位」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:目标:快速找到数据所在节点,再读或写。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

HDFS 读数据与写数据:先定位块再访问节点

在B站观看

3. 知识点详解

  1. 目标:快速找到数据所在节点,再读或写。
  2. 元信息放在哪:分布式节点自己保存。;第三方目录。;客户端缓存。

4. 应用场景

  • 客户端缓存目录降低 Master 压力。
  • 元数据服务与数据路径分离(如 GFS Master)。
  • 路由表下沉到 Proxy 或 SDK。

3.5 一致性哈希

1. 知识点论述

「3.5 一致性哈希」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:节点和键都映射到环上,键顺时针找到第一个节点。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

7 分钟详解一致性哈希:原理、缺陷与虚拟节点

在B站观看

3. 知识点详解

  1. 节点和键都映射到环上,键顺时针找到第一个节点。
  2. 节点加入或退出时,只影响相邻区间,迁移量约为 1/N。
  3. 数据倾斜用虚拟节点缓解:一个物理节点在环上占多个位置。

4. 应用场景

  • Redis Cluster、Cassandra、Memcached 等环状定位。
  • CDN 或缓存层节点增减时减少失效。
  • 虚拟节点缓解物理机性能不均。

3.6 GFS

1. 知识点论述

「3.6 GFS」是《分布式计算系统》数据划分部分的核心知识点。解决数据放在哪里、如何定位与扩容时如何少搬家的问题。本知识点首先把握:角色:客户端、Master、Chunk Server。文件切成块,块有多副本。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

解读 Google 分布式文件系统 GFS

在B站观看

3. 知识点详解

  1. 角色:客户端、Master、Chunk Server。文件切成块,块有多副本。
  2. Master 保存文件名到块、块到服务器的元数据,不存用户数据本身。
  3. 读:客户端向 Master 要块位置,再选近端 Chunk Server 读取;失败则试其他副本。
  4. 写:租约指定一段时间内的主副本,主副本排定写顺序,副本按该顺序落地。
  5. 一致性:并发写可能 consistent but undefined,副本字节相同,但不是任何一次客户端写入的完整结果。

4. 应用场景

  • 大规模日志、训练集、备份文件的分布式存放。
  • 对象存储设计可对照 Master/Chunk 角色划分。
  • 理解租约写顺序对并发写结果的影响。

本章练习(18 题)

1. 数据划分的主要目的是?

2. 热点是指?

3. 划分时要同时避免的是?

4. 范围划分更适合?

5. 哈希划分相对范围划分的取舍是?

6. 按节点数取模划分的问题是?

7. 动态调整相对静态划分,多出来的工作是?

8. 把小分区当作迁移粒度,是为了?

9. 动态调整不能忽略的成本是?

10. 数据定位要解决的问题是?

11. 元信息可以放在?

12. 客户端缓存元信息的作用是?

13. 一致性哈希如何为键选择节点?

14. 节点加入或退出时,迁移量大约是?

15. 虚拟节点用来?

16. GFS 的 Master 主要保存?

17. 客户端读文件时的路径是?

18. 并发写出现 consistent but undefined,是指?