获取文件系统中子项元数据的方法、装置和系统的制作方法
【技术领域】
[0001]本发明实施例涉及信息技术领域,更具体地,涉及信息技术领域中获取文件系统中子项元数据的方法、装置和系统。
【背景技术】
[0002]文件系统的一个目录下可能含有大量子项,所有这些子项的元数据信息(简称为“子项元数据”)如果放在一个存储对象中则会使存储对象过于庞大,对象访问互斥性会导致业务并发度低下,因此文件系统通常会将一个目录下的子项元数据分散存放于多个元数据对象,即目录分片对象中。文件系统的协议客户端,即使用文件系统的应用,经常需要获取目标目录中的子项元数据,文件系统执行这类操作时就需要读取该目标目录中的所有目录分片对象,从中提取各子项的元数据信息,交付给该协议客户端。
[0003]在现有技术中,客户端代理(ClientAgent,简称为“CA”)收到协议客户端的读取请求消息之后,从元数据服务器(Metadata Server,简称为“MDS”)并发读取目标目录中多个目录分片对象的子项元数据,再将读取的子项元数据交付给该协议客户端。若一次未交付完,则再次读取该目标目录中多个目录分片对象的子项元数据并将读取的子项元数据交付给该协议客户端,直到该目标目录中所有子项元数据都交付完毕为止。因此,客户端代理向协议客户端交付子项元数据和客户端代理与元数据服务器读取子项元数据之间为串行操作,时延较长。
【发明内容】
[0004]有鉴于此,本发明实施例提供了一种获取文件系统中子项元数据的方法、装置和系统,解决了协议客户端获取子项元数据时延较长的问题,减少了串行等待的时延。
[0005]第一方面,提供了一种获取文件系统中子项元数据的方法,包括:客户端代理从元数据服务器中获取目标目录中的子项元数据;
[0006]该客户端代理将获取到的该子项元数据写入预读缓存;
[0007]若该预读缓存中缓存的子项元数据的长度等于或大于交付长度,该客户端代理向该协议客户端发送该预读缓存中缓存的长度为该交付长度的子项元数据,同时继续从该元数据服务器中获取该目标目录中尚未获取到的子项元数据,直到向该协议客户端发送了该目标目录中的全部子项元数据,其中,该交付长度小于或等于协议块大小,该协议块大小用于表示协议客户端与该客户端代理一次交互过程中能够传输的子项元数据的最大长度。
[0008]根据本发明实施例的获取文件系统中子项元数据的方法,通过客户端代理从元数据服务器中获取目标目录中长度大于协议块大小的多个目录分片对象的子项元数据,并将获取到的子项元数据存入预读缓存中,客户端代理向协议客户端发送预读缓存中缓存的子项元数据,同时继续获取目标目录中尚未获取到的子项元数据,这样该客户端代理向协议客户端发送子项元数据与该客户端代理从该元数据服务器中获取子项元数据的过程是并行执行的,协议客户端可以直接从预读缓存中获取已经缓存的子项元数据,解决了协议客户端需要等待客户端代理从元数据服务器中获取子项元数据的问题,从而减少了协议客户端获取子项元数据的整体时延,提高了用户体验。
[0009]在第一方面的第一种可能的实现方式中,该客户端代理从元数据服务器中获取目标目录中的子项元数据,包括:
[0010]在该客户端代理首次从该元数据服务器中获取该目标目录中的子项元数据时,该客户端代理以初始获取长度为单位从该元数据服务器中获取该目标目录中的子项元数据,该初始获取长度大于该协议块大小。
[0011 ]结合第一方面的上述可能的实现方式,在第一方面的第二种可能的实现方式中,在该客户端代理继续从该元数据服务器中获取该目标目录中尚未获取到的子项元数据之前,该方法还包括:
[0012]该客户端代理根据历史交付速度和历史预读速度,确定更新的获取长度,以使得该预读缓存中缓存的子项元数据的量逐渐增加,其中,该历史交付速度为该客户端代理已经向该协议客户端发送的该目标目录的子项元数据的长度与发送该目标目录中已发送的子项元数据所用的时长之比,该历史预读速度为该客户端代理已经从该元数据服务器中获取到的该目标目录中的子项元数据的长度与获取该目标目录中已获取到的子项元数据所用的时长之比;
[0013]该客户端代理继续从该元数据服务器中获取该目标目录中尚未获取到的子项元数据,包括:
[0014]该客户端代理以该更新的获取长度为单位继续从该元数据服务器中获取该目标目录中的尚未获取到的子项元数据。
[0015]结合第一方面的上述可能的实现方式,在第一方面的第三种可能的实现方式中,该更新的获取长度L1+1由下式确定:
[0016]Li+i = Li X (vs/vr)
[0017]其中,L1表示本次获取的获取长度,Vs表示该历史交付速度,Vr表示该历史预读速度。
[0018]本发明实施例的获取文件系统中子项元数据的方法,在采用预读缓存机制的基础上,通过客户端代理实时调整从元数据服务器中获取的子项元数据的长度,可以实时调整预读速度以匹配交付速度,从而最大限度地减少串行等待的时延,同时不影响元数据服务器的性能,提高了用户体验。
[0019]结合第一方面的上述可能的实现方式,在第一方面的第四种可能的实现方式中,该方法还包括:当该目录的所有子项元数据的总长度大于该初始获取长度时,该客户端代理重复从该元数据服务器中获取长度为该初始获取长度的子项元数据,并将获取的子项元数据写入该预读缓存,直到该所有子项元数据都获取完成为止。
[0020]结合第一方面的上述可能的实现方式,在第一方面的第五种可能的实现方式中,在该客户端代理从元数据服务器中获取目标目录中的子项元数据之前,该方法还包括:该客户端代理根据本次获取的获取长度,确定需要获取的该目标目录下的多个目录分片对象的标识;该客户端代理向该元数据服务器发送请求消息,该请求消息包括该多个目录分片对象的标识;该客户端代理从元数据服务器中获取目标目录中的子项元数据,包括:该客户端代理接收该元数据服务器根据该请求消息发送的该目标目录中的子项元数据。
[0021]结合第一方面的上述可能的实现方式,在第一方面的第六种可能的实现方式中,该初始获取长度为该协议块大小的N倍,该N为大于或等于2的整数。
[0022]第二方面,提供了一种获取文件系统中子项元数据的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的单元。
[0023]第三方面,提供了一种获取文件系统中子项元数据的装置,该装置包括:接收器、发送器、存储器、处理器和总线系统。其中,该接收器、该发送器、该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。
[0024]第四方面,提供了一种获取文件系统中子项元数据的系统,该系统包括协议客户端、元数据服务器和上述第二方面的任一装置。
[0025]第五方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
【附图说明】
[0026]为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027]图1是本发明实施例提供的获取文件系统中子项元数据的方法的示意性流程图。
[0028]图2是本发明实施例提供的另一获取文件系统中子项元数据的方法的示意性流程图。
[0029]图3是本发明实施例提供的获取文件系统中子项元数据的装置的示意性框图。
[0030]图4是本发明实施例提供的另一获取文件系统中子项元数据的装置的示意性框图。
[0031]图5是本发明实施例提供的获取文件系统中子项元数据的系统的示意性框图。
【具体实施方式】
[0032]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
[0033]本发明实施例涉及信息技术领域中的文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,作为底层存储资源的管理者,应该为上层应用提供灵活有效的服务,以更有效地利用底层存储资源。元数据是数据的数据,在文件系统中,每一个文件对应一个元数据结构体。这个结构体包括文件的属性,比如文件创建、修改及访问的时间,文件拥有者,文件权限,映射信息等。文件系统的一个目录下可能含有大量子项(文件或者目录),所有这些子项的元数据信息(简称为“子项元数据”)如果放在一个存储对象中则会使存储对象过于庞大,对象访问互斥性会导致业务并发度低下,因此文件系统通常会将一个目录下的子项元数据分散存放于多个元数据对象,即目录分片对象中。
[0034]文件系统一般涉及元数据服务器、客户端代理和协议客户端。协议客户端、客户端代理和元数据服务器可以理解为三个服务器,它们之间通过网络连接。元数据服务器负责管理本文件系统内所有文件的文件名、数据块等元数据信息,并向客户端代理提供元数据写入和查询等操作。协议客户端即为使用文件系统的应用程序。当协议客户端需要获取文件系统的目标目录下的子项元数据时,就需要客户端代理从元数据服务器中读取该目标目录的所有目录分片对象,从中提取各子项的元数据信息,交付给该协议客户端。本发明实施例涉及的就是客户端代理从元数据服务器中读取子项元数据,并将读取的子项元数据发送给协议客户端的过程。
[0035]图1是本发明实施例的获取文件系统中子项元数据的方法100的示意性流程图,如图1所示,该方法100包括:
[0036]S110,元数据服务器向客户端代理发送目标目录中的子项元数据;
[0037]具体地,一个目录下的子项元数据是分散存放于该目录下的多个目录分片对象中的,该元数据服务器向该客户端代理发送子项元数据是指该元数据服务器向该客户端代理并发发送该该目录下多个目录分片对象的子项元数据。
[0038]作为一个可选实施例,该元数据服务器在首次向客户端代理发送该目标目录中