后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异

标签: 分布式存储 HDFS GFS blog | 发表时间:2015-10-13 08:00 | 作者:
出处:http://mindwind.me/

「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点。 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的。 然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下:

HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver。 但还有些细节不同的地方,所以本文主要分析下不同的地方。

写入模型

HDFS 在考虑写入模型时做了一个简化,就是同一时刻只允许一个写入者或追加者。 在这个模型下同一个文件同一个时刻只允许一个客户端写入或追加。 而 GFS 则允许同一时刻多个客户端并发写入或追加同一文件。

允许并发写入带来了更复杂的一致性问题。 多个客户端并发写入时,它们之间的顺序是无法保证的,同一个客户端连续追加成功的多个记录也可能被打断。 这意味着一个客户端在连续写入文件数据时,它的数据最终在文件中的分布可能是不连续的。

所谓一致性就是,对同一个文件,所有的客户端看到的数据是一致的,不管它们是从哪个副本读取的。 如果允许多个客户端同时写一个文件,怎么保证写入数据在多个副本间一致? 我们前面讲 HDFS 时它只允许一个写入者按流水线方式写入多个副本,写入顺序一致,写入完成后数据将保持最终一致。 而对多个客户端而言,就必须让所有同时写入的客户端按同一种流水线方式去写入,才可能保证写入顺序一致。 这个写入流程我们下一节详细分析。

写入流程

GFS 使用租约机制来保障在跨多个副本的数据写入中保持顺序一致性。 GFS Master 将 chunk 租约发放给其中一个副本,这个副本我们就称为主副本,其他副本称为次副本。 由主副本来确定一个针对该 chunk 的写入顺序,次副本则遵守这个顺序,这样就保障了全局顺序一致性。 chunk 租约机制的设计主要是为了减轻 Master 的负担,由主副本所在的 chunkserver 来承担流水线顺序的安排。 如下图,我们详细描述下这个过程。

  1. 客户端请求 Master 询问哪个 chunkserver 持有租约以及其他副本的位置。 如果没有 chunkserver 持有租约,说明该 chunk 最近没有写操作。 Master 则选择将租约授权给其中一台 chunkserver。
  2. Master 返回客户端主副本和次副本的位置信息。 客户端缓存这些信息以备将来使用。 客户端以后不再需要联系 Master,除非主副本所在 chunkserver 不可用或返回租约过期了。
  3. 客户端选择最优的网络顺序推送数据,chunkserver 将数据先缓存在内部的 LRU 缓存中。 GFS 中采用数据流和控制流分离的方法,从而能够基于网络拓扑结构更好地调度数据流的传输。
  4. 一旦所有的副本确认收到了数据,客户端将发送一个写请求控制命令到主副本。 由主副本分配连续的序列号来确定最终的写入顺序。
  5. 主副本转发写请求到所有次副本,次副本按主副本安排的顺序执行写入操作。
  6. 次副本写完后向主副本应答确认操作完成。
  7. 最后主副本应答客户端,若任意副本写入过程中出现错误,将报告给客户端,由客户端发起重试。

GFS 和 HDFS 的写入流程都采用了流水线方式,但 HDFS 没有分离数据流和控制流。 HDFS 的数据流水线写入在网络上的传输顺序与最终写入文件的顺序一致。 而 GFS 数据在网络上的传输顺序与最终写入文件的顺序可能不一致。 GFS 在支持并发写入和优化网络数据传输方面做出了最佳的折衷。

总结

GFS 的论文发表于 2003 年,后来大部分的分布式文件系统设计实现或多或少都参考了 GFS 的设计思路。 而 HDFS 算是开源分布式文件系统中最完整实现了 GFS 论文中的概念模型。 但 HDFS 依然简化了 GFS 中关于并发写的思路,本文就两者的写入模型和过程做了一些对比说明,并希望引发一些思考。

参考

[1] Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung. The Google File System
[2] Hadoop Documentation. HDFS Architecture.
[3] Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas. The Hadoop Distributed File System
[4] Tom White. Hadoop: The Definitive Guide. O'Reilly Media(2012-05), pp 94-96
[5] Yongjun Zhang. Understanding HDFS Recovery Processes
[6] Hairong
Kuang,
Konstantin
Shvachko,
Nicholas
Sze,
Sanjay
Radia,
 Robert
Chansler
, Yahoo!
HDFS
team
 Design Specification: Append/Hflush/Read
Design

[7] HDFSteam. Design Specification: HDFS Append and Truncates

相关 [后端 分布 系列] 推荐:

后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异

- - mindwind
「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的. 然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下:. HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver.

后端分布式系列:分布式存储-HDFS 异常处理与恢复

- - mindwind
在前面的文章 《HDFS DataNode 设计实现解析》 中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制. 本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程. 读文件可能发生的异常有两种:. 读取过程中 DataNode 挂了. 因为读文件不涉及数据的改变,所以处理起来相对简单,恢复机制的透明性和易用性都非常好.

高并发、高可用架构系列(一):手把手带你构建大规模分布式服务

- - IT瘾-dev
阅读本(系列)文章,你将会收获:. 全面、体系化的了解大规模分布式系统中的服务治理  . 一线互联网公司如何应对高并发、大流量场景,稳定性保障体系揭秘(高并发高可用必备)  . 常见限流算法的实现,阿里巴巴(历年双十一)限流、熔断保护利器sentinel的设计原理和实践经验(高并发高可用必备)  .

[原]Lucene系列-facet

- - 文武天下
facet:面、切面、方面. 个人理解就是维度,在满足query的前提下,观察结果在各维度上的分布(一个维度下各子类的数目). 如jd上搜“手机”,得到4009个商品. 其中品牌、网络、价格就是商品的维度(facet),点击某个品牌或者网络,获取更细分的结果. 点击品牌小米,获得小米手机的结果,显示27个.

[原]Lucene系列-FieldCache

- - 文武天下
域缓存,加载所有文档中某个特定域的值到内存,便于随机存取该域值. 当用户需要访问各文档中某个域的值时,IndexSearcher.doc(docId)获得Document的所有域值,但访问速度比较慢,而且只能获得Stored域的值. FieldCache能获得域值数组,根据docId random access域值.

后端基础知识

- Kings - 潘魏增
在团队内部做了一次《后端基础知识》的技术分享,这里也公开出来,希望对一些朋友有用. 前端工程师所必备的技能之中,后端知识的重要性显而易见,它会影响前端工程师的大局观,会直接影响分析解决问题的效率和准确度,在了解系统架构、调试以及排查故障的时候特别有用. 后端基础知识掌握得越透彻,解决问题的能力就越强.

小厂后端十连问

- - 掘金后端本月最热
大家好,我是捡田螺的小男孩. 最近一位朋友去面试,分享了一份面试真题,我整理了一下答案给大家. 如果有不正确的,欢迎指出哈,一起进步. Redis的key和value可以存储的最大值分别是多少. 怎么利用Redis实现数据的去重. Redis什么时候需要序列化. MySQL的B+树的高度怎么计算. 获取多线程并发执行结果的方式有哪些.

google全系列hosts列表

- 佳 - cooerson的各种聚合
整理了一下Google(含google大部分服务,google+,gmail,地图,gtalk等~)的hosts. 可以通过添加hosts方式,享受谷歌产品,这样读图会快很多,gmail也能随时打开了,不会出现链接不上情况了,更不用番强了. windows下修改hosts文件,添加固定的DNS解析.

可爱的Pusheen猫系列

- apple - 鸸鹋动物园
全部都会动,全部都会哦~~ (via). 还有Pusheen猫的QQ表情. © Salala for 鸸鹋动物园, 2011. 转发本文地址 可爱的Pusheen猫系列 http://www.ermiao.com/gallery/20110901/21594.html. 本文标签:Pusheen, 猫, 表情.

This man is your FRIEND系列海报

- Edward - hUrR DuRr
Fallout: New Vegas乱入:. Team Fortress 2乱入:. reddit上真是什么奇葩的subreddit都有:r/PropagandaPosters.