Google文件系统GFS精讲_第1页
Google文件系统GFS精讲_第2页
Google文件系统GFS精讲_第3页
Google文件系统GFS精讲_第4页
Google文件系统GFS精讲_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Google文件系统GFSGoogle设计GFS的动机为了满足为了满足GoogleGoogle迅速增长的数据处理需求,需迅速增长的数据处理需求,需要一个支持海量存储的文件系统要一个支持海量存储的文件系统购置昂贵的分布式文件系统与硬件?购置昂贵的分布式文件系统与硬件?Google设计GFS的动机为什么不使用当时现存的文件系统?为什么不使用当时现存的文件系统?GoogleGoogle所面临的问题与众不同所面临的问题与众不同不同的工作负载,不同的设计优先级廉价、不同的工作负载,不同的设计优先级廉价、不可靠的硬件不可靠的硬件需要设计与需要设计与GoogleGoogle应用和负载相符的文应用和负载相符的

2、文件系统件系统GFS的假设与目的硬件出错是正常而非异常硬件出错是正常而非异常系统应当由大量廉价、易损的硬件组成系统应当由大量廉价、易损的硬件组成必须保持文件系统整体的可靠性必须保持文件系统整体的可靠性主要负载是流数据读写主要负载是流数据读写主要用于程序处理批量数据,而非与用户的交互主要用于程序处理批量数据,而非与用户的交互或随机读写或随机读写数据写主要是数据写主要是“追加写,追加写,“插入写非常少插入写非常少需要存储大尺寸的文件需要存储大尺寸的文件存储的文件尺寸可能是存储的文件尺寸可能是GBGB或或TBTB量级,而且应当能量级,而且应当能支持存储成千上万的大尺寸文件支持存储成千上万的大尺寸文件

3、GFS设计原那么组件失效被认为是常态事件,而不是意外事件。组件失效被认为是常态事件,而不是意外事件。能应付对大型能应付对大型/ /超大型文件处理。超大型文件处理。绝大部分文件的修改是采用在文件尾部追加数绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。据,而不是覆盖原有数据的方式。应用程序和文件系统应用程序和文件系统APIAPI的协同设计进步了整个的协同设计进步了整个系统的灵敏性。系统的灵敏性。支持大量用户同时访问。支持大量用户同时访问。系统交互设计设计GFSGFS系统时,一个重要的原那么是最小化所系统时,一个重要的原那么是最小化所有操作和有操作和MasterMaster节

4、点的交互。节点的交互。租约和变更顺序租约和变更顺序数据流数据流原子的记录追加原子的记录追加快照快照租约和变更顺序变更是一个会改变变更是一个会改变Chunk Chunk 内容或者元数据的操作,比方内容或者元数据的操作,比方写入操作或者记录追加操作。变更操作会在写入操作或者记录追加操作。变更操作会在Chunk Chunk 的所的所有副本上执行。我们使用租约有副本上执行。我们使用租约leaselease机制来保持多机制来保持多个副本间变更顺序的一致性。个副本间变更顺序的一致性。Master Master 节点为节点为Chunk Chunk 的的一个副本建立一个租约,我们把这个副本叫做主一个副本建立一

5、个租约,我们把这个副本叫做主ChunkChunk。主。主Chunk Chunk 对对Chunk Chunk 的所有更改操作进展序列化。所有的所有更改操作进展序列化。所有的副本都遵从这个序列进展修改操作。因此,修改操作的副本都遵从这个序列进展修改操作。因此,修改操作全局的顺序首先全局的顺序首先Master Master 节点选择的租约的顺序决定,节点选择的租约的顺序决定,然后由租约中主然后由租约中主Chunk Chunk 分配的序列号决定。分配的序列号决定。设计租约机制的目的是为了最小化设计租约机制的目的是为了最小化MasterMaster节点的管理负担。节点的管理负担。租约和变更顺序客户机向M

6、aster 节点询问哪一个Chunk 效劳器持有当前的租约,以及其它副本的位置。Master节点将主Chunk 的标识符以及其它副本的位置返回给客户机。客户机缓存这些数据以便后续的操作。客户机把数据推送到所有的副本上。客户机可以以任意的顺序推送数据。Chunk 效劳器接收到数据并保存在它的内部LRU 缓存中,一直到数据被使用或者过期交换出去。当所有的副本都确认接收到了数据,客户机发送写恳求到主Chunk 效劳器。主Chunk 把写恳求传递到所有的二级副本。每个二级副本按照主Chunk 分配的序列号以一样的顺序执行这些操作。所有的二级副本回复主Chunk,它们已经完成了操作。主Chunk 效劳器

7、回复客户机。任何副本产生的任何错误都会返回给客户机。数据流为了进步网络效率,采取了把数据流和控制流分开为了进步网络效率,采取了把数据流和控制流分开的措施。的措施。在控制流从客户机到主在控制流从客户机到主ChunkChunk、然后再到所有二级副本、然后再到所有二级副本的同时,数据以管道的方式,顺序的沿着一个精心选的同时,数据以管道的方式,顺序的沿着一个精心选择的择的Chunk Chunk 效劳器链推送。效劳器链推送。目的是充分利用每台机器的带宽,防止网络瓶颈和高目的是充分利用每台机器的带宽,防止网络瓶颈和高延时的连接,最小化推送所有数据的延时。延时的连接,最小化推送所有数据的延时。数据流为了充分

8、利用每台机器的带宽,数据沿着一个为了充分利用每台机器的带宽,数据沿着一个Chunk Chunk 效劳器链顺序的推送。效劳器链顺序的推送。为了尽可能的防止出现网络瓶颈和高延迟的链接为了尽可能的防止出现网络瓶颈和高延迟的链接,每台机器都尽量的在网络拓扑中选择一台还没,每台机器都尽量的在网络拓扑中选择一台还没有接收到数据的、离自己最近的机器作为目的推有接收到数据的、离自己最近的机器作为目的推送数据。送数据。利用基于利用基于TCPTCP连接的、管道式数据推送方式来最连接的、管道式数据推送方式来最小化延迟。小化延迟。数据流假设客户机把数据从假设客户机把数据从Chunk Chunk 效劳器效劳器S1S1推

9、送到推送到S4S4。它把数据推送到最近。它把数据推送到最近的的ChunkChunk效劳器效劳器S1S1。S1S1把数据推送到把数据推送到S2S2,因为,因为S2S2和和S4S4中最接近的机器中最接近的机器是是S2S2。同样的,。同样的,S2S2把数据传递给把数据传递给S3S3和和S4S4之间更近的机器,依次类推推之间更近的机器,依次类推推送下去。我们的网络拓扑非常简单,通过送下去。我们的网络拓扑非常简单,通过IP IP 地址就可以计算出节点地址就可以计算出节点的的“间隔间隔 。原子的记录追加传统方式写入操作传统方式写入操作客户程序会指定数据写入的偏移量,对同一个客户程序会指定数据写入的偏移量,

10、对同一个regionregion的并行写入操作的并行写入操作不是串行的,不是串行的,regionregion尾部可能会包含多个不同客户机写入的数据尾部可能会包含多个不同客户机写入的数据片段。片段。记录追加记录追加客户机只需要指定要写入的数据,客户机只需要指定要写入的数据,GFSGFS保证至少有一次原子的写入操作保证至少有一次原子的写入操作成功执行,写入的数据追加到成功执行,写入的数据追加到GFSGFS指定的偏移位置上,之后指定的偏移位置上,之后GFSGFS返回返回这个偏移量给客户机。这个偏移量给客户机。记录追加成功记录追加是一种修改操作,它也遵循前面描绘的控制流程。记录追加是一种修改操作,它也

11、遵循前面描绘的控制流程。客户机把数据推送给文件最后一个客户机把数据推送给文件最后一个Chunk Chunk 的所有副本,之后的所有副本,之后发送恳求给主发送恳求给主ChunkChunk。主。主ChunkChunk会检查这次记录追加操作是否会检查这次记录追加操作是否会使会使Chunk Chunk 超过最大尺寸超过最大尺寸64MB64MB。假如超过了最大尺寸,。假如超过了最大尺寸,主主Chunk Chunk 首先将当前首先将当前Chunk Chunk 填充到最大尺寸,之后通知所有填充到最大尺寸,之后通知所有二级副本做同样的操作,然后回复客户机要求其对下一个二级副本做同样的操作,然后回复客户机要求其

12、对下一个Chunk Chunk 重新进展记录追加操作。记录追加的数据大小严格重新进展记录追加操作。记录追加的数据大小严格控制在控制在Chunk Chunk 最大尺寸的最大尺寸的1/41/4,这样即使在最坏情况下,数据,这样即使在最坏情况下,数据碎片的数量仍然在可控的范围。通常情况下追加的记录不碎片的数量仍然在可控的范围。通常情况下追加的记录不超过超过Chunk Chunk 的最大尺寸,主的最大尺寸,主Chunk Chunk 把数据追加到自己的副本把数据追加到自己的副本内,然后通知二级副本把数据写在跟主内,然后通知二级副本把数据写在跟主Chunk Chunk 一样的位置上一样的位置上,最后回复客

13、户机操作成功。,最后回复客户机操作成功。记录追加失败假如记录追加操作在任何一个副本上失败了,客户端就需要重新进假如记录追加操作在任何一个副本上失败了,客户端就需要重新进展操作。重新进展记录追加的结果是,同一个展操作。重新进展记录追加的结果是,同一个Chunk Chunk 的不同副本可的不同副本可能包含不同的数据,或者重复包含一个记录全部或者部分的数据。能包含不同的数据,或者重复包含一个记录全部或者部分的数据。一致性保障假如操作成功执行,数据一定已经写入到假如操作成功执行,数据一定已经写入到Chunk Chunk 的所有的所有副本的一样偏移位置上。这之后,所有的副本至少都到副本的一样偏移位置上。

14、这之后,所有的副本至少都到了记录尾部的长度,任何后续的记录都会追加到更大的了记录尾部的长度,任何后续的记录都会追加到更大的偏移地址,或者是不同的偏移地址,或者是不同的ChunkChunk上,即使其它的上,即使其它的Chunk Chunk 副本被副本被Master Master 节点选为了主节点选为了主ChunkChunk。就一致性保障模型。就一致性保障模型而言,记而言,记录追加操作成功写入数据的录追加操作成功写入数据的region region 是已定义的是已定义的因此也是一致的,反之那么是不一致的因因此也是一致的,反之那么是不一致的因此也就是未定义的。中说了程序可以处理不一此也就是未定义的。

15、中说了程序可以处理不一致的区域。致的区域。什么是快照pSNIA(SNIA(存储网络行业协会存储网络行业协会) )对快照对快照(Snapshot)(Snapshot)的定义是:的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点相应数据在某个时间点( (拷贝开场的时间点拷贝开场的时间点) )的映像。的映像。快照可以是其所表示的数据的一个副本,也可以是数快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。据的一个复制品。p而从详细的技术细节来讲,快照是指向保存在存储设备而从详细的技术细节来讲,快照是指向保存在存储设备中

16、的数据的引用标记或指针。我们可以这样理解,快照中的数据的引用标记或指针。我们可以这样理解,快照有点像是详细的目录表,但它被计算机作为完好的数据有点像是详细的目录表,但它被计算机作为完好的数据备份来对待。备份来对待。p快照操作几乎可以瞬间完成对一个文件或者目录树快照操作几乎可以瞬间完成对一个文件或者目录树“源做一个拷贝,并且几乎不会对正在进展源做一个拷贝,并且几乎不会对正在进展的其它操作造成任何干扰。的其它操作造成任何干扰。p用户可以使用快照迅速的创立一个宏大的数据集的用户可以使用快照迅速的创立一个宏大的数据集的分支拷贝而且经常是递归的拷贝拷贝,或者是分支拷贝而且经常是递归的拷贝拷贝,或者是在做

17、实验性的数据操作之前,使用快照操作备份当在做实验性的数据操作之前,使用快照操作备份当前状态,这样之后就可以轻松的提交或者回滚到备前状态,这样之后就可以轻松的提交或者回滚到备份时的状态。份时的状态。快照使用的技术快照使用的是标准的快照使用的是标准的COWCOWcopy-on-writecopy-on-write写时复写时复制技术。制技术。意思上就是:在复制一个对象的时候并不是真正的意思上就是:在复制一个对象的时候并不是真正的把原先的对象复制到内存的另外一个位置上,而是把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对在新对象的内存映射表中设置一个指针,指向源

18、对象的位置,并把那块内存的象的位置,并把那块内存的Copy-On-WriteCopy-On-Write位设置位设置为为1.1.在你还在上学的时候,你的父母要你不要看电视,而去复习在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是,你才真正捡起课本看书。这就

19、是“拖延战术,直到你非拖延战术,直到你非要做的时候才去做。要做的时候才去做。当然,这种事情在现实生活中时往往会出事,但其在编程世界当然,这种事情在现实生活中时往往会出事,但其在编程世界中摇身一变,就成为了最有用的技术,正如中摇身一变,就成为了最有用的技术,正如C+C+中的可以随处声中的可以随处声明变量的特点一样,明变量的特点一样,ScottMeyersScottMeyers推荐我们,在真正需要一个存推荐我们,在真正需要一个存储空间时才去声明变量分配内存,这样会得到程序在运行储空间时才去声明变量分配内存,这样会得到程序在运行时最小的内存花销。执行到那才会去做分配内存这种比较耗时时最小的内存花销。

20、执行到那才会去做分配内存这种比较耗时的工作,这会给我们的程序在运行时有比较好的性能。必竟,的工作,这会给我们的程序在运行时有比较好的性能。必竟,20%20%的程序运行了的程序运行了80%80%的时间。的时间。COW技术在对新的对象执行读操作的时候,内存数据不发生任何变在对新的对象执行读操作的时候,内存数据不发生任何变动,直接执行读操作;而在对新的对象执行写操作时,将动,直接执行读操作;而在对新的对象执行写操作时,将真正的对象复制到新的内存地址中,并修改新对象的内存真正的对象复制到新的内存地址中,并修改新对象的内存映射表指向这个新的位置,并在新的内存位置上执行写操映射表指向这个新的位置,并在新的内存位置上执行写操作。作。这个技术需要跟虚拟内存和分页同时使用,好处就是在这个技术需要跟虚拟内存和分页同时使用,好处就是在执行复制操作时因为不是真正的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论