前言

Google云计算有三大核心技术:分布式文件系统GFS、
分布式处理模型MapReduce、分布式结构化表Bigtable

后期可以通过Hadoop深入理解

GFS

Google File System(GFS)
存储海量数据的分布式文件系统

GFS是基于数据块存储的大型分布式文件存储系统

分布式存储系统

分布式存储系统,是将数据分散存储在多台独立的设备上

传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要

分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展(来自百度)

基于数据块

在这里插入图片描述file1:将180M文件分为3个数据块-chunk1、chunk2、chunk3

GFS结构

在这里插入图片描述GFS包括一个master结点(元数据服务器/主服务器),多 个chunkserver(数据块服务器)和多个client(运行各种应用的客户端)

GFS文件被划分为固定大小的数据块(Chunk),由Master在创建时分配一个64位全局唯一的Chunk句柄。Chunkserver以普通的Linux文件的形式将Chunk存储在磁盘中。为了保证可靠性,Chunk在不同的机器中复制多份,默认为三份

Master中维护了系统的元数据,包括文件及Chunk名字空间,GFS文件到Chunk之间的映射,Chunk位置信息。它也负责整个系统的全局控制,如Chunk租约管理,垃圾回收无用Chunk,Chunk复制,等等。Master会定期与Chunkserver通过心跳的方式交换信息。

Client是GFS提供给应用程序的访问接口,它是一组专用接口,不遵守POSIX规范,以库文件的形式提供。

Client访问GFS时,首先访问Master节点,获取与之进行交互的Chunkserver信息,然后直接访问这些Chunkserver,完成数据存取工作

GFS存取数据
  • 写入数据

在这里插入图片描述

  • 读取数据

在这里插入图片描述

  • 实际过程

在这里插入图片描述
访问Master节点,获取与之进行交互的Chunkserver信息,访问这些Chunkserver,完成数据存取工作
在这里插入图片描述

GFS的特点

GFS的特点:

  • 采用中心服务器模式

可以方便地增加Chunk Server
Master掌握系统内所有Chunk Server的情况,方便进行负载均衡
不存在元数据的一致性问题

  • 不缓存数据

文件操作大部分是流式读写,不存在大量重复读写,使用Cache对性能提高不大
Chunk Server上数据存取使用本地文件系统从可行性看,Cache与实际数据的一致性维护也极其复杂

  • 在用户态下实现

利用POSIX编程接口存取数据降低了实现难度,提高通用性
POSIX接口提供功能更丰富
用户态下有多种调试工具
Master和Chunk Server都以进程方式运行,单个进程不影响整个操作系统
GFS和操作系统运行在不同的空间,两者耦合性降低

GFS容错机制
  • Master的容错机制

Master保存元数据:Name Space,即文件系统的目录结构
Chunk 与 文件名的映射 (因为一个文件会被划分成多个Chunk*,因此需要一个映射来告诉系统,这个文件对应哪几个chunk)的容错通过操作日志完成,当系统发生故障时,通过分析log就可以知道当时存了哪些文件,这些文件又被分成了哪些个chunks

Chunk副本的位置信息存储在Chunk Server上的,当发生故障时,进行磁盘恢复即可

  • ChunkServer容错机制

GFS采用副本的方式实现Chunk Server的容错:
每一个Chunk有多个存储副本(默认为三个)
每个Chunk的默认大小是64MB。而每个Chunk又会被划分为多个block,每个block为64K。并且,每个Block都会对应32bit的校验码。当读取某个Chunk中的某个block时,如果与校验码产生出入,则表示此block存在错误,那么将抛弃这个Chunk,转而读取另一个Chunk副本

相关的副本出现丢失或不可恢复等情况,Master自动将该副本复制到其他Chunk Server

Chunk分布

块的大小设置原则:最小化寻址开销
每一个Chunk有多个存储副本,默认大小是64MB

块大小分为64MB比传统文件系统块大:

  • 减少了客户端和master的交互,因为对同一块的读写只需要发送一次初始化请求给master以获取块所在的地址信息。
  • 如果块值大,那么客户端更倾向于只和一个chunkserver建立tcp长连接,而避免和好几个chunkserver建立连接带来网络开销。
  • 块值大就会减少文件分块的数目,文件的元信息也就不需要包括更多的块信息,master就可以把文件的元信息放到内存中提高访问效率
  • 块过大,文件的访问几乎都会集中在某一个chunkserver上,这就容易造成热点问题
  • master存储的元数据信息,元数据要放到内存以提供快速访问,快太小会造成元数据太多,访问速度慢

将块分为64MB即最小化寻址开销

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐