分布式文件系统的预读方法和装置的制造方法

文档序号:9887784阅读:296来源:国知局
分布式文件系统的预读方法和装置的制造方法
【技术领域】
[0001]本发明涉及分布式文件系统领域,具体来说,涉及一种分布式文件系统的预读方法和装置。
【背景技术】
[0002]文件系统最初是用来管理本地磁盘,提供用户访问接口。某些数据的集合叫做一个“文件”,并赋予每一个文件一定的属性以标识该数据集合的某些属性。文件按照树结构层次进行管理和检索。分布式文件系统向用户提供和本地文件系统相同的访问接口,却可以让用户访问和管理远程的数据。分布式文件系统中的应用可能来自很多不同的节点,它所管理的数据也可能存储在不同的节点上,同时系统中可能存在多个提供元数据操作的元数据服务器,这些都视具体实现而定。分布式文件系统中有很多设计和实现与本地文件系统存在巨大的差别,也是巨大的挑战,这主要是数据、管理的物理分布和逻辑分布造成的。
[0003]常见的LinuxVFS文件系统提供读写缓存机制,其预读算法的具体过程是这样的:对于每个文件的第一个读请求,系统读入所请求的页面并读入紧随其后的少数几个页面(不少于一个页面,通常是三个页面),这时的预读称为同步预读。对于第二次读请求,如果所读页面不在缓存(Cache)中,即不在前次预读的组(group)中,则表明文件访问不是顺序访问,系统继续采用同步预读;如果所读页面在Cache中,则表明前次预读命中,操作系统把预读group扩大一倍,并让底层文件系统读入group中剩下尚不在Cache中的文件数据块,这时的预读称为异步预读。无论第二次读请求是否命中,系统都要更新当前预读group的大小。此外,系统中定义了一个window,它包括前一次预读的group和本次预读的group。任何接下来的读请求都会处于两种情况之一:第一种情况是所请求的页面处于预读window中,这时继续进行异步预读并更新相应的window和group;第二种情况是所请求的页面处于预读window之外,这时系统就要进行同步预读并重置相应的window和group。
[0004]Linux内核中文件Cache替换的具体过程是这样的:刚刚分配的Cache项链入到inactive_list头部,并将其状态设置为active,当内存不够需要回收Cache时,系统首先从尾部开始反向扫描active_list并将状态不是referenced的项链入到inactive_list的头部,然后系统反向扫描inactive_list,如果所扫描的项的处于合适的状态就回收该项,直到回收了足够数目的Cache项。
[0005]分布式文件系统客户端读取的数据需要经过网络从服务端获取,这时需要的数据可能不在服务端的缓存中,那么就需要从磁盘中读出,而磁盘是延迟非常大的慢速设备,等待时间比较长。对于延迟敏感性应用,这种等待往往无法忍受。而类似Linux文件系统的预读算法,只会根据用户请求的数据从后端取出一部分数据,当系统压力大的时候不可避免地需要等待后端从磁盘上读出数据,这大大延长了用户的读时间。
[0006]针对相关技术中的上述问题,目前尚未提出有效的解决方案。

【发明内容】

[0007]针对相关技术中的上述问题,本发明提出一种分布式文件系统的预读方法和装置,能够抵抗网络带来的抖动,缩短用户读取数据的时间。
[0008]本发明的技术方案是这样实现的:
[0009]根据本发明的一个方面,提供了一种分布式文件系统的预读方法。
[00?0]该预读方法包括:
[0011 ]在客户端接收到对目标数据的读请求后,客户端判断服务端缓存的对应读请求的数据量是否满足第一预定最优缓存量;
[0012]在服务端缓存的对应读请求的数据量不满足第一预定最优缓存量的情况下,客户端向服务端发起第一预读请求;
[0013]客户端在客户端缓存中查找对应读请求的目标数据,在查找到目标数据的情况下,从客户端缓存中读取目标数据;
[0014]客户端判断客户端缓存的对应读请求的数据量是否满足第二预定最优缓存量;
[0015]在客户端缓存的对应读请求的数据量不满足第二预定最优缓存量的情况下,客户端向服务端发起异步预读请求。
[0016]其中,在服务端缓存的对应读请求的数据量不满足第一预定最优缓存量的情况下,客户端向服务端发起第一预读请求时,客户端可通过服务端提供的预读接口发出以服务端缓存的数据量的尾地址为首地址,并按照第一预读长度的预读量的第一预读请求;
[0017]服务端响应第一预读请求,从磁盘读入数据至服务端缓存;
[0018]客户端更新服务端缓存的数据量的尾地址。
[0019]此外,该预读方法进一步包括:
[0020]在客户端在客户端缓存中未查找对应读请求的目标数据的情况下,所述客户端向所述服务端发起同步预读请求并等待数据的返回。
[0021 ]另外,在客户端缓存的对应读请求的数据量不满足第二预定最优缓存量的情况下,客户端向服务端发起异步预读请求时,客户端可向服务端发起以客户端缓存的数据量的尾地址为首地址,并按照第二预读长度的预读量的第二预读请求;
[0022]服务端响应第二预读请求,从服务端缓存中读取对应第二预读请求的数据并发送至客户端缓存;
[0023]客户端更新客户端缓存的数据量的尾地址。
[0024]根据本发明的另一方面,提供了一种分布式文件系统的预读装置。
[0025]该预读装置包括:
[0026]第一判断模块,用于在客户端接收到对目标数据的读请求后,判断服务端缓存的对应读请求的数据量是否满足第一预定最优缓存量;
[0027]第一预读模块,用于在服务端缓存的对应读请求的数据量不满足第一预定最优缓存量的情况下,向服务端发起第一预读请求;
[0028]读取模块,用于在客户端缓存中查找对应读请求的目标数据,在查找到目标数据的情况下,从客户端缓存中读取目标数据;
[0029]第二判断模块,用于判断客户端缓存的对应读请求的数据量是否满足第二预定最优缓存量;
[0030]异步预读模块,用于在客户端缓存的对应读请求的数据量不满足第二预定最优缓存量的情况下,向服务端发起异步预读请求。
[0031]其中,第一预读模块包括:
[0032]第一预读请求模块,用于通过服务端提供的预读接口发出以服务端缓存的数据量的尾地址为首地址,并按照第一预读长度的预读量的第一预读请求;
[0033]第一响应读取模块,用于响应第一预读请求,从磁盘读入数据至服务端缓存;
[0034]第一更新模块,用于更新服务端缓存的数据量的尾地址。
[0035]此外,该预读装置进一步包括:
[0036]同步预读模块,用于在客户端缓存中未查找对应读请求的目标数据的情况下,向服务端发起同步预读请求并等待数据的返回。
[0037]另外,异步预读模块包括:
[0038]第二预读模块,用于向服务端发起以客户端缓存的数据量的尾地址为首地址,并按照第二预读长度的预读量的第二预读请求;
[0039]第二响应读取模块,用于响应第二预读请求,从服务端缓存中读取对应第二预读请求的数据并发送至客户端缓存;
[0040]第二更新模块,用于更新客户端缓存的数据量的尾地址。
[0041]本发明通过两级预读使客户端和服务端都缓存一定数量的数据,使得客户端缓存可以抵抗网络带来的抖动,特别是在压力大时,网络延迟比较长时,通
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1