Andrew File System

Andrew File System

2015-01-01 #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发消息说明自己重启了。

5. 参考文献

?

1.http://pages.cs.wisc.edu/~remzi/OSTEP/dist-afs.pdf

?

时间: 2024-08-24 13:12:34

Andrew File System的相关文章

DFS(distributed file system)

A clustered file system is a file system which is shared by being simultaneously mounted on multiple servers. There are several approaches to clustering, most of which do not employ a clustered file system (only direct attached storage for each node)

The Google File System

摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务. 虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们的设计还是以我们对自己的应用的负载情况和技术环境的分析为基础 的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同.所以我们重新审视了传统文件系统在设计上的折衷选择,衍生出了完全不同的设计 思路.

谷歌三大核心技术(一)Google File System中文版

The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务. 虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们的设计还是以我们对自己的应用的负载情况和技术环境的分析为基础 的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同.所以我们重新审

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 Spanner on OSDI 2012. Colossus is also used by spanner to store its tablets. The information about Colossus is slim compared with GFS which is published in 

Google File System读书笔记

GFS是google分布式存储的基石,其他存储系统,比如Google的bigtable.megastore.percolator均直接或者间接的构建在GFS上. 系统架构 GFS Master维护了系统的元数据,包括文件及chunk命名空间.文件到chunk的映射关系.chunk的位置信息:复制整个系统的全局控制,master定期会与CS通过心跳的方式交换信息 GFS ChunkServer(CS,数据块服务器)64MB的chunk块,由master在创建时分配一个64位全局唯一的chunk句柄

NW.JS File System 文件夹的操作( 创建, 删除, 读取 )

<script type="text/javascript"> /* * 引入File System 模块 */ var fs = require("fs"); /* * 创建文件夹的方法 * mkdir(path, callback(){}) * path: 文件夹所在路径 * callback("错误信息 <成功返回null>"): 回调函数 */ fs.mkdir('./test', function(err){ i

NFS中小企业常见的网络文件系统服务(network file system)

NFS中小企业常见的网络文件系统服务(network file system) RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并在NFS客服端请求时将该端口和功能对应的信息传递个给请求数据的NFS客服端 流程: 1,先开启RPC服务 2,再启动NFS服务 3,NFS服务向RPC注册启动的端口 4,客服请求NFS服务 5,RPC返回端口给客服端 环境搭建: 服务端为 nfsserver  客服端为 nfsclient NFS服务需要安装的软件包: yum install nfs-ut

名字就叫&quot;nfs&quot;-(network file system)

一.简介   NFS(network file system)网络文件系统.通过网络让不同的主机系统之间可以实现文件或目录共享.分为客户端和服务器,NFS网络文件系统很像windows系统的网络共享.安全功能.网络驱动器和Samba服务类似. 二.安装及其配置 服务器端配置如下: 1)安装nfs-utils和rpcbind两包 yum -y install nfs-utils rpcbind 2)启动服务 service nfs start或/etc/init.d/nfs start    /e

Can Microsoft’s exFAT file system bridge the gap between OSes?

转自:http://arstechnica.com/information-technology/2013/06/review-is-microsofts-new-data-sharing-system-a-cross-platform-savior/ With Apple's licensing of Microsoft's exFAT file system, it seems like we finally have a good option for OS X and Windows d