简介
这三篇论文是分布式存储的奠基论文也是Google的成名论文。
Google File System
GFS面向大规模数据密集型存储应用,可以运行在普通硬件上,能够提供超过数TB的存储空间、以及灾难冗余能力。
设定
- 一个系统中所有的组件(即某台物理机)都是不可靠的,其失效是常态事件。
- 需要存储的文件都非常大,且超过了一般文件系统能够支持的大小。
- 文件的读写方式是在文件结尾追加数据。
- 应用程序和文件系统 API 的协同设计提高了整个系统的灵活性。
设计
文件读写
文件的读写方式
- 顺序流式读取
- 随机读取
由于随机读取方式效率不高,会通过把小规模的随机存取合并、排序后,一次性完成。
对于大规模流式存取,采用生产者-消费者模型,保证同时只有一个生产者对文件进行追加数据。
在文件读写方式中,系统的延迟不重要,重要的是网络带宽。
架构
在逻辑上,一个GFS集群包含一个Master节点,以及多个chunk服务器。
每个存储在GFS上的文件,都会被分割为具有唯一标识的固定大小的块。Chunk服务器直接将这些块以文件形式存储到硬盘中。出于可靠性考虑,每个块会被在3个及以上的服务器中被存储。
Master 节点管理所有的文件系统元数据。这些元数据包括名字空间、访问控制信息、文件和 Chunk 的映射信息、以及当前 Chunk 的位置信息。Master 节点使用心跳信息周期地和每个Chunk服务器通讯,发送指令到各个 Chunk 服务器并接收 Chunk 服务器的状态信息。
Master服务器在Chunk服务器接入后,和Chunk服务器同步数据,获得Chunk服务器上保存的元信息。
租约和变更顺序
Master和主chunk服务器建立租约,主chunk和用户之间通过控制流进行交互。用户和任意chunk服务器间形成数据流。