Andrew File System
Andrew File System
突然感觉艺术细胞爆发啊,刚刚去Utown吃饭,一路上发现许多美丽的景色,拿手机一直拍,哈哈,元旦好心情~~不扯淡,还有两篇博客以及半本书要做呢,加油!!
1. 本文介绍什么
这篇博客介绍的是Andrew File System(AFS),跟上一篇的NFS是同一类型的,都是分布式文件系统。
2. AFS的设计目标
与NFS不同,AFS的设计目标是可扩展性,也就是说使得系统规模扩张,支持多的client等等。
3. 设计思想
在单server多client的架构下,要增强系统可扩展性主要就是要减轻server的负担,通过设计为server减负成了设计主要目的。
那么首先来看NFS,文件的读写每次都要由client向server发出请求,然后才能操作,这对server是一个很大的负担,事实上根据局域性原理,很短的时间内被操作的文件很可能会被多次操作;其次,为了保持client端cache数据不至于过时,client需要每隔相对较短的时间(3秒)跟server同步一次信息,这也是一个很大的负担。
于是,AFS的改进也主要是从这而开始的。
AFS的解决方法是一种被称之为whole-file caching的方法,也就是说每次操作文件,就直接将整个文件从server端读出来然后存在本地磁盘中,这样后续的操作就可以在本地执行了,而不用server的参与。这减少了server的很多工作量。
对于第二个问题,AFS的做法是一种被称之为call back的方法,与其client过来问server某个文件是否过时(大多数情况都是没有过时),不如在文件过时的时候由server通知client。概括的来说就是,server知道各个client所缓存的文件,那么当一个文件被修改的时候,server通知client,这样下一次client需要操作这个文件的时候就不用缓存的数据了。
4. 具体设计细节
- 命名空间
采用File identifier(FID)来标识文件,FID由三部分组成,卷标示符、文件标示符、以及一个"uniquifier"(这个东西是为了在文件删除的时候用来回收再利用卷标示符以及文件标示符的,就不展开了)
基本架构跟NFS是一样的的,还是这样:
完成的操作流程
为了便于描述,我们假设我们需要操作文件/home/remzi/notes.txt,见下图(其中的home FID就是目录"/home"的FID,可以认为是已知的):
- client 首先向server发出请求,以便获得文件夹remzi的FID,使用命令Fetch(home FID, "remzi");
- server端收到请求后,寻找remezi文件夹,然后设置一个标志callback以便“记住”该client缓存的文件夹“memezi”的信息,最后返回文件夹remezi的FID以及文件夹的内容(文件夹也是一种“文件”);
- client将remezi文件夹的内容存储在本地磁盘,并且在本地设置文件夹remezi的callback状态;
- 同样,client获得了文件foo.txt的FID、foo.txt的内容并且设置了callback状态,server也设置了文件foo.txt的callback;
- client对该文件执行read操作,则直接为转化为本地read操作;
- client关闭文件,此时检查文件是否被改变,如果被改变了,则将文件发给server以便更新server;否则,正常关闭即可。
- 假设client改变了文件内容并关闭文件了,则server接收到新的foo.txt之后更新到磁盘上的本地文件(也会更新cache,这个跟NFS一样的),同时通知缓存了文件foo.txt的client发出通知,修改client存储的foo.txt文件的callback状态;
- client再次打开文件foo.txt,则按照路径/home/remezi/foo.txt一步步检查callback状态,如果没有过时则继续在本地操作就可以了;否则,重复上面的过程。
此外,AFS做了一个修改,如果两个client在同一个机器上面,则client A修改文件,client B立刻就知到这个文件过时了。哈哈,就跟本地一样。 如果一个文件同时被两个client修改,那么怎么处理?哈哈,按照client关闭该文件的时间先后顺序,后关闭文件的那个client所做的修改被保存。这也确保了,每次文件修改都是由一个client完成的。
宕机 这个呢,AFS就有点麻烦了,毕竟client和server之间有了“共享信息”。具体而言,是这样:
- client 宕机
一旦client宕机然后重启,那么此时client就不相信任何存储在磁盘上的文件了,磁盘上的文件在client重启后第一次打开的时候需要跟server确认一下。 - server宕机
这个是一个很大的事故,因为server失去了跟client之间的“共享信息”,已经没有办法或者client在哪些文件上留下callback了。那么,一旦server宕机并重启,则所有client在磁盘上存储的文件/夹都被认为是可疑的,在server宕机重启后第一次打开,需要跟server确认一下,同时在server上重新留下callback。
这要求server重启后,每个client及时获知。一般而言可以server重启后向每个client发消息说明自己重启了。
- client 宕机
5. 参考文献
❝
1.http://pages.cs.wisc.edu/~remzi/OSTEP/dist-afs.pdf
❞
Andrew File System的更多相关文章
- 谷歌三大核心技术(一)The Google File System中文版
谷歌三大核心技术(一)The Google File System中文版 The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个 ...
- The Google File System 中文版
摘要 我们设计并实现了Google文件系统,一个面向分布式数据密集型应用的.可伸缩的分布式文件系统.虽然运行在廉价的日用硬件设备上,但是它依然了提供容错功能,为大量客户机提供了很高的总体性能. 虽然与 ...
- 【转】谷歌三大核心技术(一)The Google File System中文版
The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价 ...
- Google File System中文版
英文原文地址: Google File system 译文原文地址: The Google File System中文版 Google File System中文版 摘要 我们设计并实现了Google ...
- The Google File System中文版
译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量 ...
- 大数据理论篇HDFS的基石——Google File System
Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...
- Colossus: Successor to the Google File System (GFS)
Colossus is the successor to the Google File System (GFS) as mentioned in the recent paper on Spanne ...
- Design and Implementation of the Sun Network File System
Introduction The network file system(NFS) is a client/service application that provides shared file ...
- 乌版图 read-only file system
今天在启动虚拟机的时候,运行命令svn up的时候,提示lock,并且read-only file system,这个....我是小白啊,怎么办?前辈在专心写代码,不好打扰,果断找度娘啊 于是乎,折腾 ...
随机推荐
- 线段树---no end
额,还有 :区间操作,交,并,补等 区间合并 扫描线 这些问题有空再研究吧.... 先看j2ee了..... 传送门 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 【week10】psp
项目 内容 开始时间 结束时间 中断时间 净时间 2016/11/19(星期六) 写博客 吉林一日游规格说明书 10:30 15:10 20 260 2016/11/20(星期日) 看论文 磷酸化+三 ...
- HTML5资源站
前端里:http://www.yyyweb.com/ http://www.cnblogs.com/html5tricks/p/3925844.html
- phaser3 微信小游戏若干问题
纯属个人兴趣, 如有兴趣可共同参与维护. git: https://gitee.com/redw1234567/phaser3_wx image的地方需要修改,代码贴上 var ImageFile = ...
- 第200天:js---常用string原型扩展
一.常用string原型扩展 1.在字符串末尾追加字符串 /** 在字符串末尾追加字符串 **/ String.prototype.append = function (str) { return t ...
- 【Python】Python 猜年龄的游戏
游戏规则: 允许用户最多尝试3次 每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序 如何猜对了,就直接退出 age= cou ...
- 对Spark2.2.0文档的学习2-Job Scheduling
Job Scheduling Link:http://spark.apache.org/docs/2.2.0/job-scheduling.html 概况: (1)集群中多个应用的调度主要考虑的是不同 ...
- solr源码分析之searchComponent
上文solr源码分析之数据导入DataImporter追溯中提到了solr的工作流程,其核心是各种handler. handler定义了各种search Component, @Override pu ...
- C++解析-外传篇(1):异常处理深度解析
0.目录 1.异常的最终处理 2.结束函数terminate() 3.小结 1.异常的最终处理 问题: 如果在main函数中抛出异常会发生什么? 如果异常不处理,最后会传到哪里? 下面的代码的输出什么 ...
- P3469 [POI2008]BLO-Blockade
题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...