现在的位置: 首页 > 综合 > 正文

GFS文件系统研究

2019年05月05日 ⁄ 综合 ⁄ 共 2889字 ⁄ 字号 评论关闭
GFS文件系统研究
2010年10月21日 星期四 下午 02:37

1. 关于GFS文件系统的概念

GFS的全称是Google File System,为了满足Google迅速增长的数据处理要求,Google设计并实现的Google文件系统(GFS)。Google文件系统是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务,也可以提供容错功能。

谷歌“三宝”是“Google文件系统”,“BigTable大表”,“MapReduce算法”。至今除了谷歌,在数据中心维护上还没有谁自己开发文件系统这种十分底层的技术,有了自己的文件系统,谷歌就可以有效的组织庞大的数据,服务器和存储,并用它们工作。作为谷歌“三宝”的其中之一,GFS的技术优势不言而喻。

GFS在很多方面上与之前出现过的分布式文件系统有着许多相似的地方,比如性能、可扩展性、可靠性和可用性。但是,它的设计更多地基于我们对于我们的应用的特性的观察和技术环境,包括现在的和将来可能出现的,因此也与之前的文件系统设计有着显著的不同。Google仔细地考察过传统的取舍,并且在设计空间中对各种不同方案做了深入的研究。

2.关于GFS文件系统结构功能

GFS文件系统为分布式结构,它是一个高度容错网络文件系统,主要chunkserver由一个master(主)和众多chunkserver(大块设备)构成的,体系结构如下图(图为自己绘制,有理解偏差还请指出):

GFS文件系统研究

 

下面简单描述一下GFS文件系统的工作过程:

1.客户端使用固定大小的块将应用程序指定的文件名和字节偏移转换成文件的一个块索引,向master(主)发送包含文件名和块索引的请求;

2.master收到客户端发来的请求,master向块服务器发出指示,同时时刻监控众多chunkserver的状态。Chunkserver缓存master从客户端收到的文件名和块索引等信息。

3.master通过和chunkserver的交互,向客户端发送chunk-handle和副本位置。其中文件被分成若干个块,而每个块都是由一个不变的,全局唯一的64位的chunk-handle标识。Handle是由master在块创建时分配的。而出于安全性考虑,每一个文件块都要被复制到多个chunkserver上,一般默认3个副本;

4.客户端向其中的一个副本发出请求,请求指定了chunk handle(chunkserver以chunk handle标识chunk)和块内的一个字节区间。

5.客户端从chunkserver获得块数据,任务完成。

通常Client可以在一个请求中询问多个chunk的地址,而master也可以很快回应这些请求。

GFS文件系统是可以被多个用户同时访问的,一般情况下,Application和chunkserver是在可以同一台机子上的,主要的数据流量是通过Application和chunkserver之间,由于数据访问的本地性极大的减少了Application与Master之间的交互访问,减少了Master的负荷量,提高的文件系统的性能。

客户端从来不会从master读和写文件数据。客户端只是询问master它应该和哪个 chunkserver联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中客户端直接和chunkserver交互。由于master对于读和写的操作极少,所以极大的减小了master的工作负荷,真正提高了master的利用性能。

Master保存着三类元数据(metadata):文件名和块的名字空间、从文件到块的映射、副本位置。所有的metadata都放在内存中。操作日志的引入可以更简单,更可靠地更新master的信息。

Master为GFS的控制和神经系统,副本为Master的备份,Chunk主要用来和用户交换数据。网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使Master的瘫痪,也会有Shadow作为替补,并且Shadow在一定时候也会充当Master来提供控制和数据交换。Google每天有大量的硬盘损坏,但是由于GFS系统,这些硬盘的损坏是允许的。

在GFS文件系统的演讲大会上,演讲者做了个形象的比喻。分布式的文件系统被分割为很多细胞单元,一旦细胞损坏,神经系统(master)会迅速发现并有相应的冗余措施来使系统正常运行,这些细胞可以看作很多NFS主机。

3.GFS文件系统的商业竞争优势

当然,作为Google的技术基石,GFS可以给大量的用户提供总体性能较高的服务,我个人觉得有六大优势:

1. Google采用的存储方法是大量的、分散的普通PC机的存储方式,极大的降低了成本;

2.对大文件数据快速的存取,这个毫无疑问是可以达到的;

3.容易扩展,它是成本很低的普通电脑,支持动态的插入节点;

4.容错能力强,它的数据同时会在多个chunk server上进行备份,具有相当强的容错性;

5.高效访问,它是通过Big table来实现的,这个是Google file system上层的结构。Google file system在实现分布式文件系统的做法上面很多都是简单的,但是确实非常高效。

6.GFS文件系统稳定性是无庸置疑的,很多生产环境都在应用,虽然性能不是最优,但是应用与我们这样的环境已经足够。具体GFS技术的实现以及优越性,不再多说。

不过GFS也有缺陷, GFS提供了一个类似的文件系统界面,它没有向POSIX那样标准的实现API。文件在目录中按层次组织起来并有路径名标示。这些难题只有留待我们年轻人来解决了。

4.个人小结

身为谷歌“三宝”,GFS文件系统的技术优势不言而喻,他解决了传统一些文件系统的缺点——占用存储空间、造成数据不一致性的问题。GFS利用廉价普通电脑作为服务器,因此,他可以买很多很多机器来解决存储容量问题。而至于数据不一致性,Google可能通过“时间戳”给用户提供最新的信息。

对于大规模的集群系统,机器出现故障很正常,因此系统容错必须十分重视。文件系统必须具有高可用性,数据完整性和相应的诊断工具。通过快速恢复,chunk复制,master复制达到高可用性;通过checksum检查数据完整性;通过操作日志记录系统中出现的各种事件,以便诊断错误。

通过观察发现,绝大部分的时候,对文件的修改操作都只是附加内容,很少是翻盖写或者随机写。因此在GFS中,对文件附加操作进行重点优化。

而且GFS文件系统采用的是块模式存储信息,所以GFS对小文件存储并不存在优势,所以这方面还有待改进,而且没有向用户提供API接口也是一个亟待我们解决的问题。

作为Google的技术基石,GFS可以给大量的用户提供总体性能较高的服务。因而,我们可以认为GFS的最大优点就是实现了服务器的“贫民化”,我相信在不久的将来,云计算将会普及,GFS将会变得跟完善。

以上仅是个人愚见,或有理解偏差,还请广大读者指出。(周立)

抱歉!评论已关闭.