分布式文件系统是分布式系统的基石,本文从较上层的高度对常见的三个分布式文件系统:NFS、AFS和HDFS进行介绍。

分布式文件系统有两大模式:

1) Remote Access Model.

在这种模式下,非本地文件不会复制到本地,所以对非本地文件的读取和修改,利用RPC进行。利用这种模式,可以减少对consistency的考虑(适用于对consistency要求高的场合),从而实现POSIX的要求:Strict one copy semantics. 这个标准又称为UNIX semantic:每次每个client读到的必须是最新的值。

NFS (Network File System)和HDFS用的都是这种模式。

2) Upload/ Download Model.

AFS(Andrew File System)用的是这种模式。所有非本地文件无论在读取还是修改,都首先会复制到本地。如果在本地进行了修改,则会在关闭了本地的文件后,更新服务器的文件。同时,通知其它的client,它们的文件不再是最新的。这种模式下,用的是session semantics: 不保证client读到的最新值。因为在修改文件内容的client关闭文件前,服务器是不会收到更新的内容的,也不会通知其它的client他们本地的文件已经过时了。

NFS (Networked File System)

NFS是Linux上支持的分布式文件系统。最先由Sun公司开发,后来被广泛采用与Linux系统中。其表现为:可以把远程的文件夹mount在本地的文件系统的某个位置(挂载点)上。其不会复制远程的文件内容到本地,所有的读取和修改都是通过RPC(通过TCP或者UDP)进行。Windows的网上邻居采用的也是这个原理。

如下图的例子,people和users都是远程的文件夹,直接挂载在本地的文件树的student和staff节点(可以变一个名字)下:

当linux进行系统调用,如read()的时候,系统发现students的实质是远程的people文件夹,便会把请求给NFS Client,接着进行RPC(Remote Procedure Call)去读取远程的文件夹(目录实质也是一种特殊的文件)内容。

AFS (Andrew File System)

Andrew File System的比起NFS的优点在于其的可拓展性(Scalability)。因为其把读或者写的文件都是复制到本地,所以在读比写更多的环境下,这种文件系统能大大地减少减少和服务器的交流(减少网络延时的影响),提高反应速度,所以能轻松应对更多的读请求。(可拓展性)。

由于其是upload/ download model的形式,所以是session semantics的。不能保证读到的是最新内容。

其运作机制如下:

对于系统调用,如open, read, write, close纷纷统一发送到kerne。其中,有可能会调用venus的只有open和close。其余的read和write对本地的copy进行。

如果是远程的文件,则首先看看有没有本地备份或者现在的call back promise是否valid。

这里需要通知Venus去读取远程文件分为两种情况:

1/ 没有本地的copy;

2/ 有本地的copy,但是call back promise 是 invalid,代表当前的copy已经过时了,服务器上有最新的需要重新获取。

否则,有本地备份且valid的call back promise的情况下,可以直接从本地的copy读取内容。

callback promise什么时候会Invalid呢?就是在某个client对本地的文件进行修改后,close之后,有更新的情况下,venus会给vice发送更新的通知并上传。Vice更新后,会给所有的client 发送callback promise cancel的信号,使得callback promise变为Invalid。

AFS在表面上和NFS无异,都是把远程的文件挂载在本地的文件系统。但是,其内部的作用机制是不同的。

HDFS - Hadoop Distributed File System (GFS)

HDFS是目前应用最广的分布式文件系统,其遵循的是UNIX semantic。每次读到的都是最新的value。其一致性的算法是PAXOS的投票机制,在ZooKeeper当中由Follower投票决定。

关于ZooKeeper的介绍在前述的ZooKeeper系列当中已经有介绍了,现在来说说HDFS的其它方面。

HDFS的理念是以数量代替质量。怎么说呢?我利用很多的一般的机器和三份Replication的策略,来代替数量少的极品机器的方式来保证Failure Rate。

其结构图如下:

每个Data Center有很多的rack,每个rack有约30台机器。可以看出来,HDFS需要很多的一般机器来实现其复制容灾的性能。

Chunk为单位的存储方式:

HDFS当中,文件都被分为多个chunk,每个chunk是64MBytes. HDFS的策略是每个chunk均有3个replications,一般位于不同的physical nodes上。

HDFS的文件读取和写入:

由于HDFS是把所有的文件分成chunks的,那我需要读一个文件时候,怎么知道读哪些chunk呢?这就需要去问HDFS的Master了(NameNode)。它存着所有的文件及其对应的chunks的位置。每次读写文件的步骤如下:

1) Client calls master with file name and chunk index.
2) Master returns chunk identifier and the locations of replicas.
3) Client makes call on a chunk server (Primary Chunk Server)for the chunk and it is processed sequentially with no caching. It may ask for and receive several chunks. (from Primary Chunk Server).

写也是类似的流程:

1) Client calls master with file name and chunk index.
2) Master returns chunk identifier and the locations of replicas. One is designated as the primary.
3) The client sends all data to all replicas. The primary coordinates with replicas to update files consistently across replicas.

Distributed System: DFS系列 -- NFS, AFS HDFS(GFS)相关推荐

  1. Distributed Systems笔记-NFS、AFS、GFS

    CMU 95702 关于 NFS.AFS.GFS 的笔记. NFS(Network File System) 目的: Your files are available from any machine ...

  2. 分布式文件系统-HDFS(   HDFS全称是Hadoop Distributed System)

    分布式文件系统-HDFS HDFS Hadoop的核心就是HDFS与MapReduce.那么HDFS又是基于GFS的设计理念搞出来的. HDFS全称是Hadoop Distributed System ...

  3. 分布式系统(Distributed System)资料

    分布式系统(Distributed System)资料 <Reconfigurable Distributed Storage for Dynamic Networks> 介绍:这是一篇介 ...

  4. Hadoop系列 (三):HDFS详细介绍

    文章目录 Hadoop系列文章 HDFS简介 HDFS基本概念 分布式文件系统特点 HDFS设计目标 HDFS架构 HDFS应用场景 HDFS三大组件 NameNode SecondaryNameNo ...

  5. nfs挂载hdfs,实现云存储

    本来不知道nfs是啥,因为群里的Harry童鞋有个问题,如何把本地目录挂载到hdfs上,搞什么云存储,说那么巧就是那么巧,HDP支持nfs,然后我就照着文档的说明去做,最后弄出来了. 1.修改机器上的 ...

  6. Distributed System: Lamport clock vs Vector clock | 分布式系统:Lamport clock 和 Vector clock 详解

    Ref: Toutube Distributed Systems lecture series https://www.youtube.com/watch?v=x-D8iFU1d-o&list ...

  7. ibm服务器型号历史,IBM System X系列服务器的历史

    IBM System X系列服务器的历史 IBM System X系列服务器的历史 IBM System X系列服务器的历史 众所周知,IBM的服务器产品线非常丰富齐全,从入门级到大型机,一应俱全.打 ...

  8. 联想system x系列服务器手册,IBMSystemx系列手册.pdf

    IBMSystemx系列手册 成长型企业 /midmarket/cn/zh/ ~ 1 ~ IBM System x系列手册 IBM System x 机架式和塔式服务器 [摘要] • IBM Syst ...

  9. Note: Time clocks and the ordering of events in a distributed system

    http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf 分布式系统的时钟同步是一个非常困难的问题,this ...

最新文章

  1. [转载] 中华典故故事(孙刚)——08 狗咬吕洞宾
  2. Java 11 已发布,String 还能这样玩!
  3. coderfoces D. Gourmet choice
  4. SpringBoot中常见注解
  5. 最新一二线城市知名 IT 互联网公司名单出炉!
  6. ASP.NET MVC 后台中 设置 js提示
  7. 发那科程序全部输出_走,去看看发那科机器人全新的自动化解决方案!
  8. java final 详解_java中Final详解
  9. jep-java-4.0-trial.jar 下载
  10. windows 计算机 快捷键,Windows7计算器快捷键汇总
  11. macd ema java源码_MACD指标源码汇总,成功率极高,买卖点提前一目了然!
  12. 嵌入式软件项目流程、项目启动说明书(示例)
  13. 雷军到底有多少钱!!
  14. count(1)、count(*)、count(列名) 详解
  15. kirin710f是什么处理器_华为kirin710f处理器相当于骁龙几
  16. 食用卵磷脂市场现状及未来发展趋势
  17. VR AR应用开发交流大会在天津成功举办 京津VR AR企业交流心得共促合作
  18. 爆品铺货新出路?选品为王的电商APP如何高效拉新,实现GMV飙升
  19. 浅谈精益数字化工厂(Lean Digital Factory, LDF)
  20. Docker:docker 环境配置 python 版

热门文章

  1. PDF文件如何快速转换成Word文件?两个方法教你搞定
  2. IIS 编译器错误消息: CS0016未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\roo
  3. 企业微信怎么通过手机号添加好友?企业微信添加好友话术!
  4. JESD204B参数及时钟关系
  5. 她力量系列一丨复旦大学黄萱菁教授:期待更多女性领会计算机科学的奥妙
  6. 计算机几种行为管理器,企业如何选择员工电脑操作行为管理软件?
  7. vivo电池损耗指令代码_vivo手机电池换新活动开启,69起即可换新电池
  8. premiere消除红眼_如何修复红眼-使用Photoshop CC从图片中消除红眼
  9. android后台通过View生成分享图片
  10. 现在的FM电台呀,什么玩艺儿