1.什么是GFS?
-
Google文件系统(Google File System,GFS)是一个大型的分布式文件系统。它为 Google云计算提供海量存储,并且与Chubby、MapReduce及Bigtable等技术结合十分紧 密,处于所有核心技术的底层。
-
Google GFS 不是一个开源的系统,我们仅能从Google公布的技术 文档来获得相关知识。
-
Google GFS 的新颖之处在于它采用廉价的商用机器构建分布式文件系统,同时将 GFS 的设计与Google应用的特点紧密结合,简化实现,使之可行,最终达到创意新颖、有用、 可行的完美组合。
-
Google GFS 将容错的任务交给文件系统完成,利用软件的方法解决系统可靠性 问题,使存储的成本成倍下降。
-
Google GFS 将服务器故障视为正常现象,并采用多种方法,从多 个角度,使用不同的容错措施,确保数据存储的安全、保证提供不间断的数据存储服务。
-
系统架构
Client
是GFS提供给应用程 序的访问接口,它是一组专用接口,不遵守POSIX规范,以库文件的形式提供。应用程序 直接调用这些库函数,并与该库链接在一起。Master
是GFS的管理节点,在逻辑上只有一 个,它保存系统的元数据,负责整个文件系统的管理,是GFS文件系统中的“大脑”。Chunk Server
负责具体的存储工作。数据以文件的形式存储在 Chunk Server上,Chunk Server的个数可以有多个,它的数目直接决定了GFS的规模。GFS将文件按照固定大小进行分块,默认是64MB,每一块称为一个Chunk(数据块),每个Chunk都有一个对应的索引号(Index)。
2.有哪些特点
-
采用中心服务器模式
GFS采用中心服务器模式管理整个文件系统,简化了设计,降低了实现难度。Master 管理分布式文件系统中的所有元数据。文件被划分为Chunk进行存储,对于Master来说, 每个Chunk Server只是一个存储空间。当然,中心服务器模式也带来一些固有的缺点,比如极易成为整个系统的瓶颈等。
-
不缓存数据
GFS文件系统根据应用的特点,没有实现缓存,这是从必要性和可行性两方面考虑的。
-
从必要性上讲,客户端大部分是流式顺序读写,并不存 在大量的重复读写,缓存这部分数据对提高系统整体性能的作用不大。
-
从可行性上讲,如何维护缓存与实际数据之间的一致性是一个极其复杂的问题,在GFS中各个Chunk Server的稳定性都无法确保,加之网络等多 种不确定因素,一致性问题尤为复杂。
-
-
在用户态下实现
文件系统是操作系统的重要组成部分,通常位于操作系统的底层(内核态)。 然而,GFS却选择在用户态下实现,主要基于以下考虑。
- 在用户态下实现,直接利用操作系统提供的POSIX编程接口就可以存取数据, 无须了解操作系统的内部实现机制和接口,降低了实现的难度,提高了通用性。
- POSIX接口提供的功能更为丰富,在实现过程中可以利用更多的特性,而不像内核编程那样受限。
- 用户态下有多种调试工具,而在内核态中调试相对比较困难。
- 用户态下,Master和Chunk Server都以进程的方式运行,单个进程不会影响到整个操作系统,从而可以对其进行充分优化。在内核态下,如果不能很好地掌握其特性,效 率不但不会高,甚至还会影响到整个系统运行的稳定性。
- 用户态下,GFS和操作系统运行在不同的空间,两者耦合性降低,方便GFS自身和内核的单独升级。
-
只提供专用接口
通常的分布式文件系统一般都会提供一组与POSIX规范兼容的接口,使应用程序可以 通过操作系统的统一接口透明地访问文件系统,而不需要重新编译程序。GFS在设计之初,是完全面向Google的应用的,采用了专用的文件系统访问接口。
- 降低了实现的难度。通常与POSIX兼容的接口需要在操作系统内核一级实现, 而GFS是在应用层实现的。
- 采用专用接口可以根据应用的特点对应用提供一些特殊支持,如支持多个文件并发追加的接口等。
- 专用接口直接和Client、Master、Chunk Server交互,减少了操作系统之间上下 文的切换,降低了复杂度,提高了效率。
3.它的容错机制
-
Master容错
# Master上保存了GFS文件系统的三种元数据 1.命名空间,也就是整个文件系统的目录结构。 2.Chunk与文件名的映射表。 3.Chunk副本的位置信息,每一个Chunk默认有三个副本。
-
首先就单个Master来说,对于前两种元数据,GFS通过操作日志来提供容错功能。
-
第三种元数据信息则直接保存在各个Chunk Server上,当Master启动或Chunk Server向Master 注册时自动生成。因此当Master发生故障时,在磁盘数据保存完好的情况下,可以迅速恢复以上元数据。
-
为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份, 这样在当前的GFS Master出现故障无法工作的时候,另外一台GFS Master可以迅速接替其工作。
-
-
Chunk Server容错
- GFS采用副本的方式实现Chunk Server的容错。
- 每一个Chunk有多个存储副本(默认为三个),分布存储在不同的Chunk Server上。副本的分布策略需要考虑多种因素,如网络的拓扑、机架的分布、磁盘的利用率等。对于每一个Chunk,必须将所有的副本全部写入成功,才视为成功写入。
- 之后,如果相关的副本出现丢失或不可恢复等情况,Master自 动将该副本复制到其他Chunk Server,从而确保副本保持一定的个数。
4.它的相关技术
-
大规模集群安装技术
安装GFS的集群中通常有非常多的节点,最大的集群超过1000个节点,而现 在的Google数据中心动辄有万台以上的机器在运行。因此迅速地安装、部署一个GFS的系 统,以及迅速地进行节点的系统升级等,都需要相应的技术支撑。
-
故障检测技术
GFS是构建在不可靠的廉价计算机之上的文件系统,由于节点数目众多,故障发生十分频繁,如何在最短的时间内发现并确定发生故障的Chunk Server,需要相关的集群监控技术。
-
节点动态加入技术
当有新的 Chunk Server 加入时,如果需要事先安装好系统,那么系统扩展将是一件十分烦琐的事情。如果能够做到只需将裸机加入,就会自动获取系统并安装运行,那么将会大大减少GFS维护的工作量。
-
节能技术
Google采用了多种机制来降低服务器的能耗,例如对服务器主板进行修改,采用蓄电池代替昂贵的UPS(不间断电源系统)来提高能量的利用率。