前言
这是看GFS的论文的研读笔记。
GFS设计目的
- 满足日益增长的数据处理需求
GFS设计的目标
高性能,可伸缩,高可靠,高可用
- 高性能:一般是指时间复杂度小,空间复杂度小,CPU占用时间少等
- 可伸缩:指程序性能硬件资源的增加和减少而增强或减弱的能力,可伸缩有很多种,线性伸缩(世界人民的目标),超线性伸缩,负伸缩等,但是随着程序规模的增大,伸展性会越来越差
- 可靠性:指程序在规定条件下,在规定时间内完成规定任务的能力
- 可用性:就是一个系统处在可工作状态的时间的比例
GFS设计假设
- 组件失效被认为是常态事件,而不是意外事件。(容错能力)
- 系统存储一定数量的大文件。(大数据)
- 系统的工作负载主要由两种读操作组成:大规模的流式读取和小规模的随机读取。(读写模型)
- 系统的工作负载还包括许多大规模的、顺序的、数据追加方式的写操作。(读写模型)
- 系统必须高效的、行为定义明确的实现多客户端并行追加数据到同一个文件里的语意。
- 高性能的稳定网络带宽远比低延迟重要。
GFS设计架构
GFS架构图.png注解:
- 元数据:命名空间、访问控制信息、文件和Chunk的映射信息、以及当前Chunk的位置信息
- 心跳:master以心跳周期来和chunk通信,给chunk指示以及收集他们当前状态
GFS系统设计的优点
- 容错性:每个块都会复制到多个块服务器上。缺省情况下,我们使用3个存储复制节点,不过用户可以为不同的文件命名空间设定不同的复制级别。
- 单一的Master节点:单一的Master简化了设计,使架构能变得简单。Master一般会返回离Client最近的文件副本(减少网络IO)
- Client采用库形式:GFS客户端代码以库的形式被链接到客户程序里。客户端代码实现了GFS文件系统的API接口函数、应用程序与Master节点和Chunk服务器通讯、以及对数据进行读写操作
- Chunk的大小选择:默认为64MB, 较大Chunk尺寸减少Client和Master通讯,减少Master存储元数据的大小,Client对一个Chunk能进行多次操作,减少网络IO。
GFS系统的缺点
- 单一的Master节点:有可能成为系统瓶颈,需要减少对Master的读写较大
- Chunk尺寸的缺点:小文件会存储为一个Chunk,多个Client同时对单个小文件多次操作时,存放这个Chunk的Server会成为热点
系统缺点的解决:
- 单一的Master节点:Client只询问Master相关文件的元数据信息,Client对元数据信息做适当缓存,后面的具体读写操作均在Chunk上
网友评论