提示:预计阅读时间三分钟,该文章仅对GFS做了一的简略介绍,细节方面建议阅读原文。

文章目录

  • 前言
  • 一、GFS是什么?
    • 1.1 简单介绍
    • 1.2 我们为什么需要阅读GFS的论文?
    • 1.3 GFS论文对业界有什么影响?
  • 二、GFS尝试解决那些问题?
  • 三、GFS的架构(The big picture)是什么?
    • 1.单主模式
    • 2.元数据(Metadata)
    • 3.GFS的一致性保证
    • 其他要素:
      • 原子操作(Atomic Operations)
      • 块副本(Chunk replicas)
  • 四、我从GFS中学到了什么?
  • 五、GFS的缺点是什么?
  • References

前言

GFS是学习分布式系统的启蒙文章,可能小伙伴们见到三十几页的中文版论文会望而却步,或者见到15页的英文原版会因为语言问题而say no,那么今天我就用一篇三分钟的小文章带你初尝GFS的味道!原版和中文译文版的GFS论文分享链接放在文末,有需要的老铁们可以自行下载。


提示:以下是本篇文章正文内容,下面案例可供参考

一、GFS是什么?

1.1 简单介绍

这个问题说大也大,说小也小。GFS是Google File System的缩写,字面意义上就是Google的文件系统,技术层面上来讲,GFS是Google在2003年前后创建的可扩展分布式文件系统 ,用来满足 Google 不断扩展的数据处理需求。GFS 为大型网络和连接的节点提供容错、可靠性、可扩展性、可用性和性能。GFS 由多个由低成本商品硬件组件构建的存储系统组成。它经过优化以适应 Google 的不同数据使用和存储需求,例如其搜索引擎会生成大量必须存储的数据。在我看来这个系统最大的亮点有两个,一个是使用集群的概念,将硬件设施连接起来共同进行文件存储任务;另外一个是充分利用了现成服务器的优势,同时最大限度地减少了硬件弱点。

1.2 我们为什么需要阅读GFS的论文?

  1. 对学习分布式系统有莫大的帮助,因为这个系统的技术架构中吸纳了很多我们在分布式系统中反复提到的几个主题:并发性,容错,复制和一致性。
  2. GFS是当时一个在现实世界中完成构建并使用的系统,例如Google的MapReduce和BigTable这两个应用程序都搭建在这个系统上。这足以证明在当时那个年代中GFS是一个成功的分布式文件系统。
  3. 这篇文章在技术层面写的其实不是很晦涩难懂,同时并不需要太多的前置知识就可以对GFS系统有一个很好地了解,因为作者从应用程序级别到网络级别的各种考虑细节都展示了出来。

1.3 GFS论文对业界有什么影响?

  1. GFS比99%的用于学术研究的分布式系统都来的大,同时使用规模也更大。因为这是一个搭载了Google的应用程序的一个较为成熟的文件系统;
  2. 由于Google的成功使用,导致行业内各大公司进行模仿使用,国内的TFS,BFS等其本质都借鉴了GFS的成功经验,也可以看成对GFS的一种致敬。
  3. 展现了弱一致性(weak consistency)的成功使用。
  4. 展现了sigle-master(单主)的成功使用。
  5. 毫不夸张的说,在分布式这个领域,GFS是一个开天辟地的举措,所以是一篇值得拜读的文章。

二、GFS尝试解决那些问题?

因为Google的业务的发展,导致其内部的许多服务需要一个大规模、高性能的统一存储系统。对这个系统有四个要求:

  1. 全球化。这意味着任何客户端都可以访问(读写)任何文件,允许在不同的应用程序之间共享数据。
  2. 支持在多台机器上自动分片大文件。这可以通过允许对每个文件快进行并行处理来提高性能,并且还可以处理无法放入单个磁盘的大文件。
  3. 支持故障自动恢复。
  4. 针对大文件的顺序访问以及最常见的读取和追加操作进行了优化。

特别的,作者对持续的高带宽(high sustained bandwidth)进行了GFS的优化,因为目标的应用程序需要以较高的速率批量处理数据,但是对于低延迟并不是必要的(因为GFS是典型的应用于内部服务的,而不是面向客户端的)。

三、GFS的架构(The big picture)是什么?

接下来让我们看看GFS的架构图。对此,作者总共做了三个主要的设计选择:1)选择仅使用一个主服务器(单主模式)2)选择仅将一些元数据存储在非易失性存储中,3)选择弱一致性保证。


GFS由单个主服务器和多个数据块服务器组成,并由多个客户端访问。文件被分成固定大小的64MB数据块。每一个数据块都有一个不可变且全局唯一的快处理程序,由主控服务器在创建块的时候分配的。默认情况下,每个文件块都会被复制到3个不同的块服务器上。

1.单主模式

主服务器维护所有文件系统元数据。这包括从文件到块的映射、块位置等。主节点还定期向块服务器发送 HeartBeat 消息以向其提供指令并收集其状态(图 1)。
优点:
极大地简化了 GFS 设计,因为单一主机可以使用全局知识做出复杂的块放置和复制决策。
缺点:
1.单点故障。需要定期的将关键元数据检查点放到非易失性存储中。
2.可能是系统的性能瓶颈点。必须尽量减少主服务器参与读写的操作。

对于第二点,在架构图中我们可以发现,客户端从来不通过主服务器进行读取和写入文件数据。客户端会先询问主服务器他应该联系哪个块服务器,在限定的时间内缓存此信息(指应该联系的块服务器的信息),并直接与块服务器交互以进行读写操作。

2.元数据(Metadata)

元数据存储在主内存中,而数据存储在块服务器中。这使得主服务器操作非常快,并且还允许主服务器在后台通过其整个状态有效地执行定期扫描。周期性扫描用于实现块垃圾收集、块迁移等。

主服务器存储以下三种元数据:

  1. 文件和 Chunk 的命名空间。
  2. 文件和 Chunk 的对应关系。
  3. 每个 Chunk 副本的存放地点。

请注意,前两种类型的元数据通过将更改记录存储到主服务器本地磁盘上的操作日志中来保持持久性,并定期复制到远程机器。但是,主服务器不会持久存储块位置信息。相反,它会在主服务器启动时以及当有块服务器加入集群时询问每个块服务器关于它的块数据。这是因为块服务器是块位置和主要状态信息的权威数据源。

3.GFS的一致性保证

GFS提供了一种宽松的一致性模型,也可以称之为你弱一致性模型,它适用于Google的高度分布式应用程序,但是实现起来相对来说简单和高效。论文中作者描述了文件区域的两种状态。

  1. 如果所有客户端,无论从哪个副本读取,读到的数据都一样,那么我们认为文件 region 是“一致的”;
  2. 如果对文件的数据修改之后,region 是一致的,并且客户端能够看到写入操作全部的内容,那么这个 region是“已定义的”。

其他要素:

原子操作(Atomic Operations)

GFS提供了一些原子操作。文件命名,空间修改例如文件创建都是原子性的,并且由主服务器专门处理。命名空间锁(Namespace locking)保证了原子性,主服务器的操作日志定义了这些操作的全局顺序。

与常规的写入操作或者最佳操作相比,GFS提供了记录追加操作,即使存在并发冲突的情况下,也能够保证要追加的数据至少以原子操作的方式执行一次,但以GFS选择的偏移量(offset)。GFS将会返回这个追加数据的偏移量给客户端。

块副本(Chunk replicas)

为了保证经过一系列的成功的mutations之后,文件区域(region)包括最后一次mutation的数据,GFS做了以下两个操作:1)通过指定一个主副本,以同样的顺序对块副本做mutation;2)使用块版本号来检测由于在块服务器关闭时错过了mutations而变得过时的任何副本。

过时的副本永远不会涉及到一个mutation或给客户端请求块位置。他们是最早被收集的垃圾。

四、我从GFS中学到了什么?

1.弱一致性在实际应用中也是可行的,但是需要搭配某种形式的应用程序级检查机制。
2. 分布式文件系统作为基础设施对于很多数据密集型应用程序非常有用。这也就印证了随着数据规模的日益扩大,为什么所有的大厂都会自研一套分布式文件系统了。
3. 如果我们将主服务器中的元数据与块服务器中的存储分开,并最小化客户端对主服务器的调用,那么单个主服务器模式是可行的。
4. 我们可以使用文件分块来实现并行操作。
5. 我们可以使用主副本块服务器对所有的副本的写入操作进行排序。

五、GFS的缺点是什么?

随着这么多年的发展,GFS早就进行了多次的更新换代,那么从现状考虑,当时的GFS的缺点是什么呢?

  1. 随着数据量的不断增加,原先的单主模式集群表现不如一开始那么好了。这很好理解,虽然GFS已经从设计层面减少了主服务器的操作压力,但是量变引起质变,随着数据量发生数量级层次的变化,主服务器的工作量也会大幅增加,保存所有信息所需要的存储量也在增加,所以对于大数据状态下的分布式系统,单主模式是注定要被淘汰的。
  2. GFS使用的一致性模型在现在的运用中可能过于宽松了,因为这是一种弱一致性模型,在并行量增加的时候出错的概率会大大增加。
  3. 当时的系统缺少自动转移到主副本(master replica)的操作。工程师过去不得不手动执行主状态的负载检查点和故障转移。这是缓慢和低效的。所以将此过程自动化是必要的。

希望我的文章对大家理解GFS有一定帮助。

References

[1] Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung (2003). The Google File System. https://pdos.csail.mit.edu/6.824/papers/gfs.pdf

[2] GFS: Evolution on Fast-forward (2009) https://queue.acm.org/detail.cfm?id=1594206

三分钟带你弄懂GFS(Google File System)相关推荐

  1. 三分钟带你弄懂slot插槽——vue进阶

    文章目录 三分钟带你弄懂slot插槽--vue进阶 一.概述 程序员之死 什么是 slot插槽? 2.6.0 版本中的 slot 二.具名插槽 例子 效果图 代码 三.小惊喜 三分钟带你弄懂slot插 ...

  2. 三分钟带你读懂 BERT

    本文为 AI 研习社编译的技术博客,原标题 : BERT Technology introduced in 3-minutes 作者 | Suleiman Khan, Ph.D. 翻译 | 胡瑛皓.s ...

  3. 三分钟带你看懂prototype原型——ES6进阶

    三分钟带你看懂prototype原型--ES6进阶 1. prototype 定义 2. new 构造函数 3. 存储 4. prototype 作用 1. prototype 定义 在JS中的类的实 ...

  4. 三分钟带你看懂HDMI接口的PCB设计

    三分钟带你看懂HDMI接口的PCB设计 本文主要讲解的是HDMI的设计,包括作用和运用的总结,希望大家看了以后能轻松的应对各种HDMI方案的PCB设计. 一.什么是HDMI? 高清晰度多媒体接口(英文 ...

  5. 开关柜太复杂看着头疼?三分钟带你看懂开关柜!

    安科瑞 华楠 开关柜是指按一定的方案将一次设备.二次设备组装而成的成套配电装置,主要用来对线路.设备实施控制.保护.开关柜按进出线电压等级可分高压开关柜(固定式和手车式)和低压开关柜(固定式和抽屉式) ...

  6. 5 分钟带你弄懂 k-means 聚类

    聚类与分类的区别 分类:类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类.属于监督学习. 聚类:事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群 ...

  7. 三分钟带您搞懂代理模式

    全文共1439字,预计阅读时间:10分钟 定义: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式是一种比较贴近于生活的 设计模式,现实生活中也有很多代理模式的例子: ...

  8. 明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...

    类型别名(type alias)一个名字,是某种类型的同义词.使用类型名有很多好处,能让复杂的类型名字变得简单明了,易于理解和使用. 有两种方法可用于定义类型别名.传统的方法是使用关键字typedef ...

  9. 三分钟带你搞懂什么是向上转型和向下转型

    什么是向上转型? 通过在网上查了资料,和普遍的介绍,一句话总结就是"父类引用指向子类对象",例: Human h=new Human(); h.eat();//人类 Animal ...

最新文章

  1. java 远程调试超时_java 远程调试
  2. UBUNTU手动安装JDK的详细步骤
  3. java 雪花特效_java实现图片飘雪花的特效
  4. iOS 12.0-12.1.2 完整越狱支持 Cydia
  5. html 简单 在线编辑器 ie ff,一款垃圾中的极品HTML编辑器(兼容IE OR FF)
  6. flink写入clickhouse遇到210错误故障排查思路
  7. windows+caffe(三)——求取图片的均值
  8. MATLAB_平面几何_判断两平面矩形是否干涉
  9. python变量的理解_如何理解Python中的变量
  10. linux正则表达式_【开发者成长】5 分钟搞定 Linux 正则表达式
  11. Ubuntu ICEauthority error
  12. Linux C/C++ —— intent 工具,time 命令
  13. Vidmore Player for Mac(多功能蓝光播放器)
  14. GeoHash距离大致估计
  15. coreldraw快速撤回_CorelDRAW操作技巧,教你CDR撤销操作方法与设置技巧
  16. 【eoeAndroid社区索引】Android控件知识汇总
  17. 安装软件后,运行提示:无法正常启动0xc0150002
  18. EasyCVR人脸识别框在播放器上显示及消失的机制设定
  19. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换的方法
  20. 香港各个大学计算机类专业

热门文章

  1. memcache、邮箱
  2. android米聊手写和涂鸦源码,米聊Android新版发布 广播也能玩涂鸦
  3. L1-028 判断素数(Python3)
  4. 笔记本开机只有电池灯亮还可以听见工作声音就是屏幕也没有反应是怎么回事
  5. anaconda下vnpy的安装
  6. 在CSS布局中max-width 无效的解决方法
  7. Linux标准I/O与文件I/O操作的区别
  8. Java开发教程!三面蚂蚁金服(交叉面)定级阿里P6
  9. C语言 找找出2到100的完全数,运用c语言输出100以内所有的完全数
  10. c语言完全数简单编程,C语言实例 完全数