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,这个....我是小白啊,怎么办?前辈在专心写代码,不好打扰,果断找度娘啊 于是乎,折腾 ...
随机推荐
- P4tutorial实战
Tutorial样例实战 GitHub仓库地址 参考博客 实验一:SIGCOMM_2015/Sourse_Routing 实验环境: OS:Ubuntu16.04 bmv2:behavioral-mo ...
- P4语法(4)Control block
Control block Control block之中用于放置设计好的Table和Action. 可以把control block认为是pipeline的一个模板,之前用的v1model中就是in ...
- this & super
/* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类. this和super的用法很相似. this:代表一个本类对象的引用. super:代表一个父 ...
- WebSphere Application Server诊断和调优
近段时间,我们项目中用到的WebSphere应用服务器(WAS),但在客户的production环境下极不稳定,经常宕机.给客户造成非常不好的影响,同时,也给项目组很大压力.为此,我们花了近一个月时间 ...
- spring重定向与转发
1.重定向 A,通过ModelAndView以及RedirectView @RequestMapping("/login1.do") public ModelAndView log ...
- webpack打包多html开发案例
简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...
- Mac 常用快捷键整理
Mac下常用的快捷键: Command+W 将当前窗口关闭(可以关闭Safari标签栏,很实用) Command+Option+M 将所有窗口最小化 Command+Q 关闭当前应用程序(相当于Doc ...
- Binlog的三种模式
binlog模式分三种(row,statement,mixed) 1.Row 日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有 ...
- Fiddler绕过前端直接和后台进行交互
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...
- week1day01 认识python 变量 数据类型 条件if语句
1.什么是python? Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像Pe ...