GFS系统架构及设计要点

来源 :中国电气工程学报 | 被引量 : 0次 | 上传用户:xxf103000
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文主要阐述关于分布式文件系统GFS,它是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。通过详细介绍其一致性模块以及读写流程,针对GFS的大块的逻辑和设计理念及相关要点都进行了详细的分析。
  关键词:云储存系统;GFS系统架构;设计策略;
  一、GFS设计思路
  1.组件/机器失效
  GFS包括几百甚至几千台普通的廉价设备组装的存储机器,同时被相当数量的客户机访问。GFS组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效状态中恢复。例如谷歌遇到过各种各样的问题,比如应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效等造成的问题。所以,持续的监控、错误侦测、灾难冗余以及自动恢复的机制必须集成在GFS中。
  2.谷歌处理的文件都非常巨大。(大数据):
  这点跟NEFS的场景既有相似性又不完全一致,NEFS上层对接的是NOS对象存储,基本都是大量的小文件(100MB以下),总体量比较大,对象个数比較多,因此也需要考虑元数据管理的成本,因此NEFS采用了小文件合并的设计思路(不详细展开)。
  谷歌系统中数GB的文件非常普遍。每个文件通常都包含许多应用程序对象,比如web文档。当我们经常需要处理快速增长的、并且由数亿个对象构成的、数以TB的数据集时,采用管理数亿个KB大小的小文件的方式是非常不明智的,尽管有些文件系统支持这样的管理方式。因此,设计的假设条件和参数,比如I/O操作和Block的尺寸都需要重新考虑。
  3.绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。(读写模型:顺序写,大部分顺序读,小部分随机读):
  对文件的随机写入操作在实际中几乎不存在。一旦写完之后,对文件的操作就只有读,而且通常是按顺序读。大量的数据符合这些特性,比如:数据分析程序扫描的超大的数据集;正在运行的应用程序生成的连续的数据流;存档的数据;由一台机器生成、另外一台机器处理的中间数据,这些中间数据的处理可能是同时进行的、也可能是后续才处理的。对于这种针对海量文件的访问模式,客户端对数据块缓存是没有意义的,数据的追加操作是性能优化和原子性保证的主要考量因素。
  4.应用程序和文件系统API协同设计,简化对GFS的要求(灵活性):
  例如一致性模型要求放松了,这样就减轻了文件系统对应用程序的苛刻要求,大大简化了GFS的设计。并且引入了原子性的记录追加操作,从而保证多个客户端能够同时进行追加操作,不需要额外的同步操作来保证数据的一致性。
  二、GFS接口:
  GFS提供了一套类似传统文件系统的API接口函数,文件以分层目录的形式组织,用路径名来标识。GFS支持常用的操作,如创建新文件、删除文件、打开文件、关闭文件、读和写文件。但是要理解一点:文件块被存储在linux硬盘上,GFS只是一个管理器而已,这些文件操作API也只是个对这些抽象文件的管理而已。也就是说GFS层级比底层文件系统以及虚拟文件系统层次要高。注:这点跟NEFS也比较像,NEFS也是对文件粒度进行管理的,而不是针对块设备,因此也是在底层文件系统及虚拟文件系统之上。
  四、GFS设计架构:
  使用论文中的原图如下:如图所示,GFS主要由以下三个系统模块组成:Master:管理元数据、整体协调系统活动。·ChunkServer:存储维护数据块(Chunk),读写文件数据。·Client:向Master请求元数据,并根据元数据访问对应ChunkServer的Chunk。
  三、GFS设计要点:
  (1)chunk机制
  chunk是GFS中管理数据的最小单元(数据块),每一个chunk被一个64位的handle唯一标识,chunk被当做普通的文件存储在linux系统中。每个chunk至少会在另一个chunkserver上有备份,而默认会为每个chunk做三个备份。chunk大小默认为64MB,比一般的文件系统的4kb的块要大的多得多。Chunkserver一般不会缓存数据,因为chunk都是存储在本地,故而linux已经将经常被访问的数据缓存在内存中了。
  chunk块设置比较大(一般文件系统的块为4kb)的优缺点如下:
  优点:
  1.减少元数据量,方便客户端预读缓存(filename+chunkindex->chunkhandle+chunkserverlocation),减少客户端访问的次数,减少master负载。
  2.减少元数据量,master可以将元数据放在内存中。
  3.客户端取一次元数据就能读到更多数据,减少客户端访问不同chunkserver建立tcp连接的次数,从而减少网络负载。
  缺点:
  1.对于小文件的场景,容易产生数据碎片。
  2.小文件占用chunk少,对小文件频繁访问会集中在少数chunkserver上,从而产生小文件访问热点(这个问题在后续的可靠性篇章中有相关的解决方案)。
  (2)元数据管理
  系统中三种元数据类型:·文件和chunk的名称(命名空间)。文件和chunk之间的映射关系,比如说每个文件是由哪些chunk共同组成。每个chunk备份的位置。命名空间、文件和Chunk的对应关系的存储方式:内存:真实数据;磁盘:定期Checkpoint(压缩B树)和上次CheckPoint后的操作日志;多机备份:Checkpoint文件和操作日志。Chunk位置信息的存储方式:内存:真实数据磁盘:不持久存储系统启动和新Chunk服务器加入时从Chunk服务器获取。避免了Master与ChunkServer之间的数据同步,只有Chunk服务器才能最终确定Chunk是否在它的硬盘上。   (3)Master单一性
  单一的Master节点的策略大大简化了FGS的设计。单一的Master节点可以通过全局的信息精确定位Chunk的位置以及进行复制决策。针对master宕机的处理和恢复在后续的高可用篇中详细介绍。
  (4)操作日志
  操作日志包含了关键的元数据变更历史记录。这对GFS非常重要。这不仅仅是因为操作日志是元数据唯一的持久化存储记录,它也作为判断同步操作顺序的逻辑时间基线。文件和Chunk,连同它们的版本(可以看做是更新次数,以判断chunk是否过期,低版本的认为过期),都由它们创建的逻辑时间唯一的、永久的标识。操作日志和chunk数据一样,都需要复制到多台机器,使用多副本保存。
  租约(lease)机制主要是为了保持多个副本间变更顺序一致性的。Master节点为Chunk的一个副本建立一个租约,我们把这个副本叫做主Chunk。主Chunk对Chunk的所有更改操作进行序列化。所有的副本都遵从这个序列进行修改操作。因此,修改操作全局的顺序首先由Master节点选择的租约的顺序决定,然后由租约中主Chunk分配的序列号决定。设计租约机制的目的是为了最小化Master节点的管理负担。租约的初始超时设置为60秒。不过,只Chunk被修改了,主Chunk就可以申请更长的租期,通常会得到Master节点的确认并收到租约延长的时间。这些租约延长请求和批准的信息通常都是附加在Master节点和Chunk服务器之间的心跳消息中来传递。有时Master节点会试图提前取消租约(例如,Master节点想取消在一个已经被改名的文件上的修改操作)。即使Master節点和主Chunk失去联系,它仍然可以安全地在旧的租约到期后和另外一个Chunk副本签订新的租约。写入流程如下,例如有1个主副本,2个从副本的情况:
  客户机向Master节点询问哪一个Chunk服务器持有当前的租约,以及其它副本的位置。如果没有一个Chunk持有租约,Master节点就选择其中一个副本建立一个租约(这个步骤在图上没有显示)。Master节点将主Chunk的标识符以及其它副本(又称为secondary副本、二级副本)的位置返回给客户机。客户机缓存这些数据以便后续的操作。只有在主Chunk不可用,或者主Chunk回复信息表明它已不再持有租约的时候,客户机才需要重新跟Master节点联系。
  客户机把数据推送到所有的副本上。客户机可以以任意的顺序推送数据。Chunk服务器接收到数据并保存在它的内部LRU缓存中,一直到数据被使用或者过期交换出去。由于数据流的网络传输负载非常高,通过分离数据流和控制流,我们可以基于网络拓扑情况对数据流进行规划,提高系统性能,而不用去理会哪个Chunk服务器保存了主Chunk。
  (1)当所有的副本都确认接收到了数据,客户机发送写请求到主Chunk服务器。这个请求标识了早前推送到所有副本的数据。主Chunk为接收到的所有操作分配连续的序列号,这些操作可能来自不同的客户机,序列号保证了操作顺序执行。它以序列号的顺序把操作应用到它自己的本地状态中(也就是在本地执行这些操作,这句话按字面翻译有点费解,也许应该翻译为“它顺序执行这些操作,并更新自己的状态”)。
  (2)主Chunk把写请求传递到所有的二级副本。每个二级副本依照主Chunk分配的序列号以相同的顺序执行这些操作。
  (3)所有的二级副本回复主Chunk,它们已经完成了操作。
  (4)主Chunk服务器(即主Chunk所在的Chunk服务器)回复客户机。
  任何副本产生的任何错误都会返回给客户机。在出现错误的情况下,写入操作可能在主Chunk和一些二级副本执行成功。(如果操作在主Chunk上失败了,操作就不会被分配序列号,也不会被传递。)客户端的请求被确认为失败,被修改的region处于不一致的状态。我们的客户机代码通过重复执行失败的操作来处理这样的错误。
  在从头开始重复执行之前,客户机会先从步骤(3)到步骤(7)做几次尝试。如果应用程序一次写入的数据量很大,或者数据跨越了多个Chunk,GFS客户端代码会把它们分成多个写操作。这些操作都遵循前面描述的控制流程,但是可能会被其它客户机上同时进行的操作打断或者覆盖。因此,共享的文件region的尾部可能包含来自不同客户机的数据片段,尽管如此,由于这些分解后的写入操作在所有的副本上都以相同的顺序执行完成,Chunk的所有副本都是一致的。这使文件region处于上一节描述的一致的、但是未定义的状态。读取流程可以再看一下设计架构图中的conrol和data流。
  (1)GFSclient将服务所要读取的文件名与byteoffset,根据系统chunk大小,换算成文件的chunkindex,即文件数据所处的第几个chunk。
  (2)将filename与chunkindex传给master。
  (3)Master返回给client元数据信息(包含chunkhandle与实际存储的chunkserverlocation)。然后client获取到该信息,作为key值与filename+chunkindex缓存起来。
  (4)Client根据这些元数据信息,直接对chunkserver发出读请求。对于三副本而言(一份chunk存储在三台不同的chunkserver),client选择离自己最近的chunkserver(网络?),通过之前获取的元数据信息找到需要读的chunk位置以及下一个chunk位置。如果缓存的元数据信息已过期,则需要重新向master去获取一遍。
  (5)Chunkserver返回给client要读的数据信息。
  结语
  GFS的设计思路决定了它的主体框架及设计要点。针对于GFS大部分都是顺序读取的场景来说,不需要做进一步的优化。针对数据追加的优化才是针对顺序写的目标场景进行的好的优化设计点。NEFS的目标场景跟GFS有一定的差别,NEFS上层对接的是NOS对象存储,基本都是大量的小文件(100MB以下),总体量比较大,对象个数比较多。而且大部分是顺序写,随机读场景,因此目标场景不一致导致结构和设计会有一定的差异。
  参考文献
  [1] Thomas Anderson, Michael Dahlin, Jeanna Neefe, David Patterson, Drew Roselli, and Randolph Wang. Serverless networkfil e systems. In Proceedings of the 15th ACM Symposium on Operating System Principles, pages 109–126, Copper Mountain Resort, Colorado, December 1995.
  [2] Remzi H. Arpaci-Dusseau, Eric Anderson, Noah Treuhaft, David E. Culler, Joseph M. Hellerstein, David Patterson, and Kathy Yelick. Cluster I/O with River: Making the fast case common. In Proceedings of the Sixth Workshop on Input/Output in Parallel and Distributed Systems (IOPADS ’99), pages 10–22, Atlanta, Georgia, May 1999.
  [3] Luis-Felipe Cabrera and Darrell D. E. Long. Swift: Using distributed disks triping to provide high I/O data rates. Computer Systems, 4(4):405–436, 1991.
  作者简介
  孙伟(1981-),男,汉族,内蒙古察呼伦贝尔人,集宁师范学院计算机学院讲师,工程硕士,研究方向:软件工程。
其他文献
摘要:对于广大供电公司而言,人力资源一直都是其中极具重要性的基础资源,只有做好管理工作,才能确保所有员工能够积极投入到日常工作之中,充分发挥自身积极性。然而从实际情况来看,普遍公司内部人力管理均存在一定的问题,因此相关人员理应提高重视度,通过对管理现状展开分析,及时采取措施进行改善。本篇文章主要描述了供电公司人力资源管理的现状,并对于人力资源管理问题的改善方法方面发表一些个人的观点和看法。  关键
期刊
摘要:本文结合多年核电厂隔离工作经验,对核电厂隔离的隔离规则进行总结,并对核电厂生产隔离信息化辅助的实现方式进行探讨,得出该类系统在基于设备信息充分的前提下在技术上是可行的。  关键词:核电厂隔离信息化、核电厂隔离计算机辅助、隔离规则  1. 引言  核电厂隔离工作是核电厂日常生产过程中的重要环节,通过建立能够可靠保障人身安全、设备安全、核安全的工作边界,来确保核电厂日常预防性维修及检修工作的安全
期刊
摘要:近年来,经济的发展,促进我国科技水平的提升。随着我国的科技进步与科学技术的飞速发展,机械设备成为社会生产生活中重要的生产工具。随着机械制造及其自动化设计技术的发展,社会生产力也在不断提高。由于机械设备在自动化设计中引起能耗和污染问题日益严重,造成了大量生产资源的浪费,而我国能源资源在日益枯竭。为了遵循国家可持续性发展理念,在机械设备自动化设计中引入节能设计理念已经迫在眉睫。本文就节能设计理念
期刊
摘要:城市轨道交通已经成为了大城市重点的建设项目,也已经成为了最能够缓解公共出行的一种重要的交通方式之一。但是,仅仅的从轨道交通的相关运营的角度来进行相应的规划设计,对于依然存在的诸多缺陷,是不能很好的解决的。本篇文章主要从相关的城市轨道交通安全的反恐建设规划方面进行简单的介绍,希望可以给大家带去一些启发。  关键字:城市轨道,交通,安全反恐,建设  1.前言  城市轨道交通被具体的定义为“通常情
期刊
摘要:为应对公司2019年产能爬升,提升测试区空间利用率,改善测试安全环境和提高生产测试效率,对现有测试区进行自动化改造。本系统包含8个测试区改造,属于新一代集成化综合测试工作区,为地铁和动车项目的各类变流器控制箱提供了高效率测试,满足绝对的安全性以及远程一体化操控,且具备自动采集数据和监控功能,在充分保证了测试质量的基础上进一步提高生产效率和空间利用率。  关键词:PLC;HMI;远程悬臂控制;
期刊
摘要:伴随着我国科技水平的发展,自动化技术被广泛应用在各个领域中。在机械工程中加强自动化技术的使用范畴,不仅能够有效促进生产成本的合理控制,对于企业自身的生产力提升来说也具有十分重要的现实意义。主要从自动化技术在机械工程中的应用途径进行重点分析,以此来为我国自动化技术的普及与发展做出积极的贡献。  关键词:自动化技术;我国;应用分析  引言  自动化技术具有高效、高质、节能、功能多样化、可靠性高等
期刊
摘要:伴随着国家教育的不断改革,高职院校的教育也在进一步发展,高职院校市场营销教学中,不仅要重视教学方式的更新,还要提高教学质量,采用案例教学法在市场营销教学具有重要作用,本文对“案例教学法”在高职院校“市场营销”课程教学中的实践展开说明。  关键词:“案例教学法”;“市场营销”;教学实践  前言:  高职院校中的市场营销课程具有应用性、实践性、综合性等特征,所以案例教学法在高职院校课程教学具有重
期刊
摘 要:管人就是不断创造激情、传递激情,让每个员工始终充满激情。只有让每个员工都感到命运掌握在自己手中,充分发挥自己的能力,实现自己的价值,工作激情才没有穷尽。  关键词:管人方法;授权有度;控权有术  引言  做管理的很少有人说管理好做的。不少人都吐槽现在的员工不好管,特别是“90后”员工,吵也吵不得,晾他也不行,哄着才能干点活!但凡对管理劳心劳肺的人,都是没有掌握方法。管人是门技术活,只要领会
期刊
摘要:无线传感器网络通过无线通信技术把不同的传感器节点进行组织与结合,传感器节点的单元包括:数据采集单元、数据传输单元、数据处理单元以及能量供应单元。无线网络传感器包括微控制器、存储器、通信装置、传感器等组件,通过跟外界物理环境交互,通过无线传感器网络将收集到的信息传送给其它的计算设备,在物理环境中大量地分布了这些传感器,从而组织成了一个无线传感器网络,在现实生活中配置了许多的这种网络,应用领域非
期刊
摘要:在近年来的工业自动化发展中,由于国家的大力支持和高精尖人才的引入,工业自动化领域克服了之前存在的大量问题并在自动化控制技术上实现了质的突破,自动化技术中的仪表与控制技术在自动化生产加工中的应用,推动了我国的生产制造水平提高了生产制造质量。然而在工业自动化领域内,我国的自动化仪表与自动化控制技术还存在着一些问题,这对于我国工业产品的向外输送贸易工作带来了巨大挑战。鉴于此,本文对工业自动化仪表与
期刊