一种分布式文件系统中客户端目录缓存的组织方法

文档序号:6569398阅读:221来源:国知局
专利名称:一种分布式文件系统中客户端目录缓存的组织方法
技术领域
本发明涉及分布式文件系统中目录项管理,具体来说,涉及一种分布式文件系统中客户端目录缓存的组织方法。
背景技术
随着计算机技术的飞速发展,各种应用对于存储的需求越来越大,这其中,以网络的应用最为典型。网络应用的存储需求大致分为两种,一种是大文件为主的存储需求,如视音频网络应用,这类应用的特点是文件数目不多,但是单个文件的大小通常是GB甚至TB级别;另外一种以小文件为主的存储需求,如网上商城、门户网站等,这类需求的特点是单个文件不大,但是文件数量巨大,通常单个目录下存放上千万个文件,并且此类文件通常只写入一次,以后以读取为主。
在大部分网络应用中,为了满足存储的需求,分布式文件系统被引入到各种网络应用中,这其中具有代表性的是NFS、lustre, GPFS等。这类分布式文件系统的特点是对于大文件的操作有比较好的性能,但是如果单个目录下有数量巨大的小文件,则此类文件系统的检索目录项的效率则很难令人满意。因此,很多网络公司,如淘宝、网易、腾讯等,为了满足自己的需求,纷纷针对小文件存储设计了适合自己需求的存储架构。
在目前见到的针对小文件存储进行优化的并行文件系统中,绝大部分采用单组元数据架构,并且客户端在进行元数据访问时,通常在需要时才去元数据服务器上读取。这样的以来,网络的延迟就会对客户端的响应速度照成很大的影响,并且如果客户端需要访问的数据不在元数据服务器的内存中,则还需要访问磁盘,这就使得应用程序的访问时间有很大一部分浪费在IO上面,影响了应用的实时性。发明内容
本发明旨在公开一种分布式文件系统中客户端目录项缓存的组织方法,该方法可以有效地解决网络应用中单目录下海量小文件访问效率低下的问题。
一种分布式文件系统中客户端目录缓存的组织方法,
根据需要划分目录子集,将单个目录中的目录项进行哈希运算,存储到每个目录子集中,每个目录子集分布在一台元数据服务器上,客户端上的目录项缓存结构按照目录子集进行组织。
优选的,当有应用需要遍历所述目录时,客户端首先查询本地缓存是否存在,如果存在,则直接返回给客户;如果不存在,则向元数据服务器读取,读取完成后,客户端将其存放在本地缓存,然后返回给应用。
优选的,所述读取采用并行方式进行读取。
优选的,所述客户端在第一次读取目录后,会对该目录下的文件进行预取。
优选的,所述预取的策略为将该目录下的所有目录项对应到元数据服务器上读取相应的索引节点。
优选的,所述预取的命令可以由应哟能发出,客户端在接收到预取请求时,将该批文件的索引节点从元数据服务器上读回,然后再去数据服务器预取数据。
在本发明中,分布式文件系统采用多元数据服务器架构,即单个目录的内容分布在多个元数据服务器上。之所以选用多元数据的架构,主要是为了分散元数据访问的压力, 提高并发度。针对网络应用写少读多的特性,本发明在客户端的缓存中保留目录项的内容以及对应的索引节点,以避免客户端多次读取时需要和服务器进行多次通信;同时,在初次访问一个目录时,对分布在不同元数据服务器上的该目录的目录项进行并行预读,同时,根据默认的预读策略或应用程序下发的预读策略,对文件索引节点和文件内容进行预读。这样以来,当应用程序需要访问目录项的某个文件时,该文件的元数据和数据可能已经预读进客户端本地缓存中,因而能够大大加速应用程序的执行速率。
具体实施方式
下面结合实施例做详细说明
(1)本发明中,单个目录中的目录项,先根据其名字进行哈希,将其分成若干子集, 每个子集分布在一台元数据服务器上。
(2)客户端上的目录项缓存结构按照目录项子集进行组织,即对分布在各个元数据上的目录项分别进行管理,相互之间保持独立。
(3)当应用需要遍历某个目录时,客户端先查询本地缓存是否存在,如果存在,则直接返回给用户。如果缓存不存在,则需要向元数据服务器读取。读取时,由于单个目录的所有目录项按照子集存放在不同的元数据服务器上,因此发明中采用并行的方式进行读取,这样能够加速目录项读取的速率。目录项读取回来之后,客户端先将其存放在本地缓存,然后给应用程序返回。
(4)通常应用程序访问一个目录的最终目的是访问其下的文件,因此在目录项遍历之后,紧接着会陆续有访问该目录下各个文件的请求下发给文件系统的客户端。为了充分利用应用程序业务自身处理的时间,本发明中,文件系统客户端在第一次读取目录后,会对该目录下的文件进行预取。预取的默认策略是,对该目录下的所有目录项对应到元数据服务器上读取相应的索引节点信息。应用程序也可以根据自身的特点,给客户端下发预读的策略,如需要预读某一批文件,客户端在接收到预读策略请求后,会将该批文件的索引节点从元数据服务器上读回,然后再去数据服务器上预取数据。这样以来,当应用程序需要访问具体的文件时,可能其需要的数据已经通过预读进入到了客户端的本地缓存,因而能大大减少应用程序的响应时间。
权利要求
1.一种分布式文件系统中客户端目录缓存的组织方法,其特征在于根据需要划分目录子集,将单个目录中的目录项进行哈希运算,存储到每个目录子集中,每个目录子集分布在一台元数据服务器上,客户端上的目录项缓存结构按照目录子集进行组织。
2.如权利要求1所述的方法,其特征在于当有应用需要遍历所述目录时,客户端首先查询本地缓存是否存在,如果存在,则直接返回给客户;如果不存在,则向元数据服务器读取,读取完成后,客户端将其存放在本地缓存,然后返回给应用。
3.如权利要求2所述的方法,其特征在于所述读取采用并行方式进行读取。
4.如权利要求1所述的方法,其特征在于优选的,所述客户端在第一次读取目录后, 会对该目录下的文件进行预取。
5.如权利要求4所述的方法,其特征在于所述预取的策略为将该目录下的所有目录项对应到元数据服务器上读取相应的索引节点。
6.如权利要求4所述的方法,其特征在于,所述预取的命令可以由应哟能发出,客户端在接收到预取请求时,将该批文件的索引节点从元数据服务器上读回,然后再去数据服务器预取数据。
全文摘要
在本发明中,分布式文件系统采用多元数据服务器架构,即单个目录的内容分布在多个元数据服务器上。之所以选用多元数据的架构,主要是为了分散元数据访问的压力,提高并发度。针对网络应用写少读多的特性,本发明在客户端的缓存中保留目录项的内容以及对应的索引节点,以避免客户端多次读取时需要和服务器进行多次通信;同时,在初次访问一个目录时,对分布在不同元数据服务器上的该目录的目录项进行并行预读,同时,根据默认的预读策略或应用程序下发的预读策略,对文件索引节点和文件内容进行预读。这样以来,当应用程序需要访问目录项的某个文件时,该文件的元数据和数据可能已经预读进客户端本地缓存中,因而能够大大加速应用程序的执行速率。
文档编号G06F17/30GK102541985SQ201110326448
公开日2012年7月4日 申请日期2011年10月25日 优先权日2011年10月25日
发明者刘新春, 吕明强, 常涛, 杨浩, 王勇, 苗艳超, 邵宗有 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1