【系统设计】分布式文件系统设计

222 阅读2分钟

系统核心功能:上传文件和下载文件

背景知识:

  1. 一个文件的数据主要由两部分组成:元数据和具体的文件数据
    • 元数据描述了文件的基本信息,如文件名称,大小,格式.
    • 元数据的访问频率远高于具体的文件数据,我们会查看文件夹里的内容,但不会每个文件都打开,因此元数据和文件数据一般是分开存储的

核心架构

  1. one master + chunk servers
  2. master 存储文件元信息和文件chunk所在服务器信息
  3. chunkserver存储具体的文件chunk

image.png

image.png

业务流程

上传文件

image.png 前置动作:客户端需要先将大文件分片

  1. 客户端发送文件名(文件ID)和chunk编码
  2. 服务端返回该chunk应该写在哪个哪台服务器上
  3. 客户端传上传具体的分片数据
  4. 返回写入成功

下载文件

image.png

  1. 客户端发送要请求的文件
  2. 返回chunk列表,列表记录chunk与具体文件服务器的映射关系
  3. 请求分片数据
  4. 返回分片数据

Scale

只有一个master,万一挂了怎么办?

  1. 重启master或重新选主
  2. 多master可以增加系统的可靠性,但是在大部分主从系统中,还是使用单master.
    • 单master故障的频率并不高
    • 多master要解决数据同步和数据一致性的问题,系统复杂度比单master要高得多

如何校验文件是否损坏

  1. 计算每个chunk的哈希值(chunkSum)
  2. 写入chunk时,顺便写入chunkSum
  3. 读取chunk时,重新计算chunkSum并与存储的chunkSum进行比较

chunk备份

为了提高系统可靠性,可以考虑将chunk备份在多台机器上.

image.png