并行计算——GFS

参考文章1

一、简介

GFS 也就是 google File System,Google公司为了存储海量搜索数据而设计的专用文件系统。
为了解决海量文件的存储,需要设计分布式的文件系统;
GFS并没有更改Linux的文件系统,而是在这个基础上,设计了数据块服务器,这个服务器上运行用户进程,来实现与客户端的交互。

二、架构

(一)三个主要部件
  1. 客户端(client)(多个)
  2. 主服务器(master)
  3. 数据块服务器(chunkserver)(多个)
(二)架构图

GFS含义和系统架构 gfs的组成部分_GFS

(三)特点
  1. 中心化 —— 采用中心服务器模式
  2. 用户态进程实现 —— 在Linux文件系统上层增加GFS数据块服务器(用户进程)
  3. 控制与数据分离 —— 主服务器只进行控制指令的传递和提供,不进行数据传递,降低了主服务器出现瓶颈的可能性;数据由数据块服务器直接与客户端进行交互
  4. 容错(数据副本) —— 一个数据默认存储在三个节点上,每次更新文件时会更改三份

数据块大小:64MB(减少寻址开销,减少网络开销,减少主服务器上的元数据的存储量)

(四)详细架构介绍

文件被切分为固定大小的小文件(chunk)。

chunk的创建:
  1. master会分配一个64bit的全局唯一且不可修改的chunk handler来标志这个chunk
  2. chunkserver负责:
    a. 将chunk存储在本地磁盘的Linux文件中
    b. 通过chunk hander和byte range来读写chunk文件
  3. 每个chunk都是多副本(default:三个副本)存储在多个chunkserver上,用户可以自行配置。
master的工作
  1. 记录文件系统的 metadata
    (包括名字空间、权限控制信息、文件到chunk的mapping以及chunk的分布)
  2. 负责chunk的lease管理、无用chunk的垃圾回收、chunk迁移等
  3. master定期与chunkserver通信,向chunkserver发送指令并搜集chunkserver的状态
读写数据的过程

GFS client通过GFS的API与GFS系统通信(读写数据)

  1. client向master请求获取metadata
  2. client拿着返回的metadata和chunkserver进行交互,进行数据的读写

注意,数据的读写是对所有副本而言的。