并行计算——GFS
一、简介
GFS 也就是 google File System,Google公司为了存储海量搜索数据而设计的专用文件系统。
为了解决海量文件的存储,需要设计分布式的文件系统;
GFS并没有更改Linux的文件系统,而是在这个基础上,设计了数据块服务器,这个服务器上运行用户进程,来实现与客户端的交互。
二、架构
(一)三个主要部件
- 客户端(client)(多个)
- 主服务器(master)
- 数据块服务器(chunkserver)(多个)
(二)架构图
(三)特点
- 中心化 —— 采用中心服务器模式
- 用户态进程实现 —— 在Linux文件系统上层增加GFS数据块服务器(用户进程)
- 控制与数据分离 —— 主服务器只进行控制指令的传递和提供,不进行数据传递,降低了主服务器出现瓶颈的可能性;数据由数据块服务器直接与客户端进行交互
- 容错(数据副本) —— 一个数据默认存储在三个节点上,每次更新文件时会更改三份
数据块大小:64MB(减少寻址开销,减少网络开销,减少主服务器上的元数据的存储量)
(四)详细架构介绍
文件被切分为固定大小的小文件(chunk)。
chunk的创建:
- master会分配一个64bit的全局唯一且不可修改的chunk handler来标志这个chunk
- chunkserver负责:
a. 将chunk存储在本地磁盘的Linux文件中
b. 通过chunk hander和byte range来读写chunk文件 - 每个chunk都是多副本(default:三个副本)存储在多个chunkserver上,用户可以自行配置。
master的工作
- 记录文件系统的 metadata
(包括名字空间、权限控制信息、文件到chunk的mapping以及chunk的分布) - 负责chunk的lease管理、无用chunk的垃圾回收、chunk迁移等
- master定期与chunkserver通信,向chunkserver发送指令并搜集chunkserver的状态
读写数据的过程
GFS client通过GFS的API与GFS系统通信(读写数据)
- client向master请求获取metadata
- client拿着返回的metadata和chunkserver进行交互,进行数据的读写
注意,数据的读写是对所有副本而言的。