CN114756509B - 文件系统的操作方法、系统、设备以及存储介质 - Google Patents
文件系统的操作方法、系统、设备以及存储介质 Download PDFInfo
- Publication number
- CN114756509B CN114756509B CN202210553298.3A CN202210553298A CN114756509B CN 114756509 B CN114756509 B CN 114756509B CN 202210553298 A CN202210553298 A CN 202210553298A CN 114756509 B CN114756509 B CN 114756509B
- Authority
- CN
- China
- Prior art keywords
- interface
- file
- path
- file system
- link
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
Abstract
本公开提供了文件系统的操作方法、系统、设备以及存储介质,涉及计算机技术领域,尤其涉及文件系统共享领域和云存储领域。具体实现方案为:接收文件系统的操作请求,该文件系统的操作请求中包括操作信息和节点标识;根据该节点标识查找操作路径;根据该操作路径确定操作对象;对该操作对象执行该操作信息对应的操作。本公开实施例中,通过文件系统的操作请求中的节点标识查找操作路径,有利于快速查找到操作对象,进而对操作对象执行所需的操作。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及文件系统共享领域和云存储领域。
背景技术
云原生时代,云存储具有高可用、海量容量、价格便宜等优点。云存储可以通过集群应用、网格技术或分布式文件系统等功能,使得网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能等,保证数据的安全性,并节约存储空间。很多人工智能的场景需要使用云存储。
发明内容
本公开提供了一种文件系统的操作方法、系统、设备以及存储介质。
根据本公开的一方面,提供了一种文件系统的操作方法,包括:
接收文件系统的操作请求,该文件系统的操作请求中包括操作信息和节点标识;
根据该节点标识查找操作路径;
根据该操作路径确定操作对象;
对该操作对象执行该操作信息对应的操作。
根据本公开的另一方面,提供了一种文件系统,包括:
接收模块,用于接收文件系统的操作请求,该文件系统的操作请求中包括操作信息和节点标识;
操作路径查找模块,用于根据该节点标识查找操作路径;
操作对象确定模块,用于根据该操作路径确定操作对象;
操作模块,用于对该操作对象执行该操作信息对应的操作。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开实施例中任一的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,该计算机指令用于使该计算机执行根据本公开实施例中任一的方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现根据本公开实施例中任一的方法。
本公开实施例中,通过文件系统的操作请求中的节点标识查找操作路径,有利于快速查找到操作对象,进而对操作对象执行所需的操作。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开一实施例的文件系统的操作方法的流程示意图。
图2是根据本公开另一实施例的文件系统的操作方法的流程示意图。
图3是根据本公开另一实施例的文件系统的操作方法的流程示意图。
图4是根据本公开一实施例的文件系统的结构示意图。
图5是根据本公开另一实施例的文件系统的结构示意图。
图6是根据本公开实施例的共享文件系统的总体架构的示意图。
图7是链接(Link)加载的示意图。
图8是链接更新的示意图。
图9是链接的处理逻辑的示意图。
图10是文件缓存的拆分的示意图。
图11是未命中缓存的读取数据流程示意图。
图12是命中缓存的读取数据流程示意图。
图13是用来实现本公开实施例的方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开一实施例的文件系统的操作方法的流程示意图。该文件系统的操作方法可以包括:
S101、接收文件系统的操作请求,该文件系统的操作请求中包括操作信息和节点标识。
S102、根据该节点标识查找操作路径。
S103、根据该操作路径确定操作对象。
S104、对该操作对象执行该操作信息对应的操作。
本公开实施例的文件系统可以为共享文件系统。该共享文件系统可以是基于用户态文件系统(Filesystem in Userspace,FUSE)的框架自定义的文件系统,该共享文件系统也可以称为用户态文件系统。例如,本公开实施例的文件系统可以包括接口层例如FUSE接口层,以及虚拟文件系统(Virtual File System,VFS)层(也可以称为VFS抽象层)等。FUSE接口层可以接收文件系统的操作请求例如FUSE输入输出(Input/Output,I/O)请求,再将解析后的请求发送至VFS层。VFS层收到解析后的文件系统的操作请求可以根据该请求中的节点标识例如索引节点(Inode)号查找是否存在匹配的操作路径。如果查找到操作路径,则可以根据该操作路径确定操作对象,并根据文件系统的操作请求中的操作信息执行相应的操作。例如,如果文件系统的操作请求中包括读操作信息,可以读取操作对象中的内容。再如,如果文件系统的操作请求中包括写操作信息,可以向操作对象中写入信息。操作对象可以包括文件、目录、属性等。VFS层中可以包括操作对象对应的抽象接口,例如文件操作的抽象接口、目录操作的抽象接口以及属性操作的抽象接口。根据请求中的操作信息可以调用相应的抽象接口执行相应的操作。
本公开实施例中,通过文件系统的操作请求中的节点标识查找操作路径,有利于快速查找到操作对象,进而对操作对象执行所需的操作。
图2是根据本公开另一实施例的文件系统的操作方法的流程示意图,该文件系统的操作方法包括上述实施例的文件系统的操作方法的一个或多个特征,在一种可能的实现方式中,S102根据该节点标识查找操作路径,包括:S201、根据该节点标识在目录树中查找操作路径。
在本公开实施例中,可以预先设置目录树,例如在VFS层可以设置目录树。目录树中包括多个节点,每个节点具有对应的节点标识。例如,节点标识可以为inode号。根据inode号在目录树中查找当前子节点的名称,然后向上递归查找父节点的inode号,直到inode号为根(root)节点的inode号,将查找路径中的各节点的名称拼接转换得到操作路径。通过节点标识可以在目录树中快速的查找到操作路径。
在一种可能的实现方式中,该方法还包括:S202、根据该操作路径的前缀,查找链接列表中是否存在与该操作路径匹配的链接路径。
在本公开实施例中,可以预先保存链接列表,例如在共享文件系统的链接(link)层可以保存并维护链接列表。如果链接列表中存在与操作路径匹配的链接路径,可以表示该操作路径存在对应的外部路径,可以根据外部路径即链接路径到外部存储中查找操作对象例如目标文件,进而对目标文件进行相应操作。如果链接列表中不存在与操作路径匹配的链接路径,可以表示该操作路径不存在对应的外部路径,可以在文件系统内部查找操作对象例如目标文件或目标目录,进而对目标文件或目标目录进行相应操作。通过链接列表能够区分操作对象的存储位置是否在文件系统内部,从而针对不同的存储位置能够进行合适的处理。
在一种可能的实现方式中,S103根据该操作路径确定操作对象,包括:S203、在该操作路径存在匹配的链接路径的情况下,根据该链接路径获取远端路径;根据该远端路径确定远端存储中的该操作对象。通过链接列表中的链接路径能够确定远端存储中的数据,从而在该文件系统中实现对远端存储的文件共享。
在一种可能的实现方式中,如图3所示,该文件系统的操作方法还包括:
S301、从服务端获取文件系统对应的链接列表信息;
S302、根据该链接列表信息,比较内存中的第一链接列表与服务端的第二链接列表的更新时间;
S303、在该第一链接列表的更新时间在该第二链接列表的更新时间之前的情况下,根据该链接列表信息更新该第一链接列表。
在本公开实施例中,可以基于服务端(或称为服务器)的链接列表信息来维护本地的链接列表。S301至S303是维护本地的链接列表的步骤,上述实施例中的步骤之间没有时序限制。例如,在执行S101至S104的操作步骤之前、之后或过程中,可以执行S301至S303。服务端中可以存储一个或文件系统对应的链接列表的信息和连接远端存储的参数等。该文件系统的链接层可以从服务端获取链接列表信息,该链接列表信息中可以包括服务端所保存的第二链接链表的更新时间,以及本次需要更新的信息等。链接层收到该链接列表信息后,可以比较自身的内存中的第一链接列表的更新时间与服务端的第二链接列表的更新时间。如果第一链接列表的更新时间在该第二链接列表的更新时间之前,表示第二链接列表内容可能更准确。因此,可以对根据本次需要更新的信息对第一链接列表进行更新。其中,本次需要更新的信息可以包括第二链接列表与第一链接列表中不同的信息。利用服务端的第二链接列表更新文件系统内的第一链接列表,能够保持文件系统内的第一链接列表的准确性,从而更准确且快速的确定操作对象的位置。
在一种可能的实现方式中,S301从服务端获取文件系统对应的链接列表信息,包括以下至少之一:
在文件系统启动的情况下,从该服务端获取该文件系统对应的链接列表信息;
定时从该服务端获取该文件系统对应的链接列表信息;
在该第一链接列表和/或第二链接列表发生变更的情况下,从该服务端获取该链接列表信息。
在本公开实施例中,文件系统获取链接列表信息的时机可以有多种。例如,在文件系统启动时,链接层向服务端请求获取文件系统对应的链接列表信息。再如,每天0点,每月1日,或者每隔6小时,从服务端获取一次文件系统对应的链接列表信息。再如,链接层检测到第一链接列表发生变更,则从服务端获取一次文件系统对应的链接列表信息。或者,服务端的第二链接列表发生变更,服务端主动向文件系统发送对应的链接列表信息。
在一种可能的实现方式中,如图2所示,S103根据该操作路径确定操作对象,包括:S204、根据该操作路径从文件系统的本地缓存中获取该操作对象。
在本公开实施例中,可以直接根据操作路径在本次缓存中查找操作对象即从S201直接执行S204;也可以先在链接列表查找链接路径,在S202之后如果未找到与操作路径匹配的链接路径,再执行S204在本地缓存中查找操作对象。通过本地缓存预先存储操作对象,可以减少访问远端存储的次数,提高处理效率。
在一种可能的实现方式中,该文件系统的本地缓存包括:
元信息缓存,用于缓存元数据信息和目录项;
数据缓存,用于缓存文件内容,该数据缓存用于执行数据的加载、预读、切分、存储和缓存空间的管理,并提供文件数据读写的接口。
在本公开实施例中,文件系统的本地缓存可以通过统一缓存层来实现。本地缓存可以包括元信息缓存(meta cache)和数据缓存(data cache)。元信息缓存和/或数据缓存的存储介质可以包括内存、本地磁盘以及分布式缓存的至少之一。例如,元信息缓存可以支持内存、本地磁盘以及分布式缓存的存储。通过键值(Key-Value,K-V)的存储组件可以将底层的存储介质封装成统一的K-V操作应用程序接口(Application ProgrammingInterface,API),即Meta API。Meta API可以对底层的Meta操作进行封装,提供可移植操作系统接口(Portable Operating System Interface,POSIX)兼容的API。元信息缓存可以为共享文件系统提供目录项和文件元数据信息的缓存。数据缓存可以承担存储文件数据的角色,主要负责数据的加载、预读、切分、存储和缓存空间的管理等,并向上层例如链接层提供文件数据读写的接口。数据缓存也可以提供统一的缓存操作API,支持Set、Get、Del和缓存清理等操作。数据缓存还可以支持数据缓存的管理,例如定时淘汰和清理过期的缓存,动态统计本地磁盘大小等。通过元信息缓存和数据缓存,可以提供丰富缓存资源,有利于对本地缓存进行统一管理。
在一种可能的实现方式中,该文件系统的操作方法还包括:
S205、在该数据缓存中未命中操作对象的情况下,根据偏移量和文件尺寸,从远端存储中预读多个文件块;其中,该偏移量是携带在文件系统的操作请求中的,该文件尺寸是根据该文件系统的操作请求中携带的缓存大小确定的需要预读的文件块的总量。
在本公开实施例中,根据操作路径可能在缓存中无法找到操作对象,这种情况下,可以从远端存储中预读一些文件块到指定缓存,并将从远端存储获取的其他数据保存到数据缓存中,以支持后续的文件读写。例如,在操作系统内核向文件系统发送的操作请求为读(read)请求的情况下,该读请求中可以携带偏移量(offset)和缓存(buf)大小,当缓存层接收到这个offset和buf大小后,可以根据一定的规则确定是否需要预读文件块。如果buf大小对应的文件句柄读取的数据小于一定数据量例如20M,则可以不进行预读。操作系统发送的buf大小可以理解为实际需要从远端存储读取的文件内容大小。如果buf大小超过了一定数据量例如20M,则需要预读用户指定大小的文件内容(该指定大小可以是配置项,例如默认是200M)。将预读后的数据复制(copy)到操作系统提供的缓存(buf)中,其他的数据则可以落盘到共享文件系统的本地缓存上,方便下次读取。
在一种可能的实现方式中,该远端存储包括对象存储、Hadoop分布式文件系统(Hadoop Distribute File System,HDFS)、安全文件传送协议(Secret File TransferProtocol,SFTP)和本地文件系统(Local File System,LOCAL)的至少之一,该方法还包括:对对象存储、HDFS、SFTP和LOCAL的至少之一进行适配。
在本公开实施例中,文件系统可以包括底层适配层。该底层适配层对远端存储的适配方式的示例如下:
示例1:通过对象存储例如S3的网关对该S3进行适配。
例如,为该S3的接口提供文件和/或目录的重命名操作适配。其中,该重命名操作适配可以包括:底层适配层获取对象存储的目录内容后,将该目录内容下的所有桶(bucket)复制到本地缓存中,并将原桶从该本地缓存中删除。
再如,在文件系统的操作请求为写请求的情况下,对于该写请求中的需要写入S3客户端的文件进行分片上传。其中,该分片上传可以包括:底层适配层向S3客户端发送分片上传请求,接收S3客户端为该分片上传请求分配的上传标识,将需要写入S3客户端的文件例如大文件切分为多个文件分片。底层适配层将该多个文件分片和该上传标识发送至该S3客户端。在将所有分片的数据全部发送成功后,可以发送完成分片上传(completeMultipartUpload)请求给S3客户端。S3客户端收到这个请求后,可以将这个大文件标记完成。
示例2:通过Hadoop分布式文件系统的软件开发工具包(HDFS Go SDK(SoftwareDevelopment Kit,软件开发工具包))对该HDFS进行适配。
示例3:通过安全文件传送协议的软件开发工具包(SFTP GO SDK)对该SFTP进行适配。
示例4:通过输入输出(I/O)库和系统调用库对该LOCAL进行适配。
在本公开实施例中,远端存储也可以称为底层存储。通过对多种远程存储进行适配,有利于兼容多种文件系统,实现文件共享。
在一种可能的实现方式中,S101接收文件系统的操作请求,包括:通过抽象接口从文件系统接口层接收该文件系统的操作请求,该抽象接口是基于可移植操作系统接口(POXIX)语义抽象得到的接口。
例如,在本公开实施例的文件系统的VFS层,可以为远端存储的文件系统和本公开实施例提供的文件系统之间建立虚拟文件系统的软件抽象层。文件系统接口层可以为FUSE接口层。FUSE接口层可以将FUSE的内核模块的I/O请求解析后发送至VFS层。VFS层中可以基于POXIX语义抽象得到各种抽象接口,从而支持对本公开实施例提供的文件系统的各种丰富的操作。
在一种可能的实现方式中,该抽象接口包括文件操作抽象接口、目录操作抽象接口以及属性操作抽象接口;
其中,文件操作的抽象接口包括以下至少之一:打开文件接口、关闭文件接口、写文件接口、读文件接口、文件截断接口;
该目录操作的抽象接口包括以下至少之一:创建目录接口、符合链接接口、删除目录接口、删除链接接口、打开目录接口、读取目录接口、关闭目录接口和重命名接口;
该属性操作的抽象接口包括以下至少之一:显示节点内容接口、文件或目录的时间接口、设定文件的权限接口、设置文件所有者和文件关联组接口和变更文件或者目录所属群组接口。
在本公开实施例中,通过各种抽象接口可以支持对文件、目录、属性等多种内容的操作,使得文件系统的功能更加丰富。
图4是根据本公开一实施例的文件系统的结构示意图,该文件系统可以包括:
接收模块401,用于接收文件系统的操作请求,该文件系统的操作请求中包括操作信息和节点标识;
操作路径查找模块402,用于根据该节点标识查找操作路径;
操作对象确定模块403,用于根据该操作路径确定操作对象;
操作模块404,用于对该操作对象执行该操作信息对应的操作。
本公开实施例的文件系统的操作方法可以参见上述实施例中的任意一种操作方法。该文件系统可以为共享文件系统。例如,共享文件系统可以包括接口层以及VFS层。例如,接收模块401可以设置于接口层或VFS层,操作路径查找模块402、操作对象确定模块403和操作模块404可以设置于VFS层。
图5是根据本公开另一实施例的文件系统的结构示意图,该文件系统包括上述实施例的文件系统的一个或多个特征,在一种可能的实现方式中,该路径查找模块402用于根据该节点标识在目录树中查找操作路径。
在一种可能的实现方式中,该操作对象确定模块403用于在该操作路径存在匹配的链接路径的情况下,根据该链接路径获取远端路径;根据该远端路径确定远端存储中的该操作对象。
在一种可能的实现方式中,如图5所示,该文件系统还包括:链接路径查找模块501,用于根据该操作路径的前缀,查找链接列表中是否存在与该操作路径匹配的链接路径。例如,链接路径查找模块501可以设置于共享文件系统的VFS层。
在一种可能的实现方式中,如图5所示,该文件系统还包括:链接更新模块502,用于从服务端获取文件系统对应的链接列表信息;用于根据该链接列表信息,比较内存中的第一链接列表与服务端的第二链接列表的更新时间;在该第一链接列表的更新时间在该第二链接列表的更新时间之前的情况下,根据该链接列表信息更新该第一链接列表。例如,链接更新模块502可以设置于共享文件系统的链接层。
在一种可能的实现方式中,该链接更新模块502用于执行以下至少之一:
在文件系统启动的情况下,从该服务端获取该文件系统对应的链接列表信息;
定时从该服务端获取该文件系统对应的链接列表信息;
在该第一链接列表和/或第二链接列表发生变更的情况下,从该服务端获取该链接列表信息。
在一种可能的实现方式中,该操作对象确定模块403用于根据该操作路径从文件系统的本地缓存中获取该操作对象。
在一种可能的实现方式中,该文件系统的本地缓存包括:
元信息缓存,用于缓存元数据信息和目录项;
数据缓存,用于缓存文件内容,该数据缓存用于执行数据的加载、预读、切分、存储和缓存空间的管理,并向链接层提供文件数据读写的接口。
在一种可能的实现方式中,如图5所示,该文件系统还包括:预读模块503,用于在该数据缓存中未命中操作对象的情况下,根据偏移量和文件尺寸,从远端存储中预读多个文件块;其中,该偏移量是携带在文件系统的操作请求中的,该文件尺寸是根据该文件系统的操作请求中携带的缓存大小确定的需要预读的文件块的总量。例如,预读模块503可以设置于共享文件系统的缓存层。
在一种可能的实现方式中,该远端存储包括对象存储S3、Hadoop分布式文件系统HDFS、安全文件传送协议SFTP和本地文件系统LOCAL的至少之一,如图5所示,该文件系统还包括:适配模块504,用于对对象存储、HDFS、SFTP和LOCAL的至少之一进行适配。例如,预读模块503可以设置于共享文件系统的适配层。
在一种可能的实现方式中,适配模块504通过S3网关对该S3进行适配;通过Hadoop分布式文件系统的软件开发工具包HDFS Go SDK对该HDFS进行适配;通过安全文件传送协议的软件开发工具包SFTP GO SDK对该SFTP进行适配;通过输入输出I/O库和系统调用库对该LOCAL进行适配。
在一种可能的实现方式中,适配模块504通过S3网关对该S3进行适配,可以包括:为该S3的接口提供文件和/或目录的重命名操作适配。例如,该重命名操作适配包括:获取对象存储的目录内容后,将该目录内容下的所有桶复制到本地缓存中,并将原桶从该本地缓存中删除。
在一种可能的实现方式中,适配模块504通过S3网关对该S3进行适配,可以包括:在文件系统的操作请求为写请求的情况下,对于该写请求中的需要写入S3客户端的文件进行分片上传。例如,该分片上传包括:向S3客户端发送分片上传请求,接收S3客户端为该分片上传请求分配的上传标识,将需要写入S3客户端的文件切分为多个文件分片;将该多个文件分片和该上传标识发送至该S3客户端。在将某个大文件的所有分片的数据全部发送成功后,可以发送完成分片上传请求给S3客户端。S3客户端收到这个请求后,可以将这个大文件标记完成。
在一种可能的实现方式中,该接收模块401用于通过抽象接口从文件系统接口层接收该文件系统的操作请求,该抽象接口是基于可移植操作系统接口POXIX语义抽象得到的接口。
在一种可能的实现方式中,该抽象接口包括文件操作抽象接口、目录操作抽象接口以及属性操作抽象接口;
其中,文件操作的抽象接口包括以下至少之一:打开文件接口、关闭文件接口、写文件接口、读文件接口、文件截断接口;
该目录操作的抽象接口包括以下至少之一:创建目录接口、符合链接接口、删除目录接口、删除链接接口、打开目录接口、读取目录接口、关闭目录接口和重命名接口;
该属性操作的抽象接口包括以下至少之一:显示节点内容接口、文件或目录的时间接口、设定文件的权限接口、设置文件所有者和文件关联组接口和变更文件或者目录所属群组接口。
本公开实施例的文件系统的各模块的具体功能和示例的描述,可以参见上述方法实施例中对应步骤的相关描述,在此不再赘述。
示例性地,相关技术的存储系统可以包括:(1)传统的NAS:纯硬件方案,会存在单点故障、共享受限、横向扩展困难等问题。(2)分布式文件系统:通过软件定义存储,例如HDFS、Ceph等,但是这些分布式文件系统也存单点故障、小文件性能受限、Inodes受限、横向扩展困难等问题。(3)对象存储:例如云服务的存储,存在缺少完整的语义、元数据性能差、时延高、扁平空间管理难等问题。
在人工智能(Artificial Intelligence,AI)场景下,较多的AI场景无法使用对象存储的接口,并且大容量分布式存储磁盘IO和网络IO能力偏弱,不支持不同远端存储类型数据的访问,需要对接不同存储,运维复杂。
例如,存储系统在机器学习平台非常重要,主要因为以下几个方面:(1)程序的分发,需要执行的是程序包,不是简简单单的程序,如何系统打包分发,这个需要共享文件系统。(2)POSIX语义的文件系统:大大增强可执行程序库生态,不需要对接各类存储系统,不需要特殊考虑挂载系统的功能限制。(3)方便查看运行时日志和历史信息:比如运行时,可以基于共享文件系统,查看各个任务的实时日志;可以存储大量的作业历史运行信息,卸载主节点的存储压力。(4)方便各类第三方存储系统挂载:统一使用POSIX访问,屏蔽不同存储上数据的不同访问方式;方便统一的二次授权。
此外,在机器学习场景中,用户数据往往保存在一个独立存储系统。机器学习平台的上层应用通过网络远程访问用户数据,上层应用每次I/O操作都变成一次远程访问。而通常用户使用的存储系统包括HDFS、NAS、对象存储等大容量分布式存储,磁盘IO和网络IO能力偏弱。如果训练数据集为大量小文件,容易导致存储系统预读(Prefetch)失效而频繁触发IO操作,读写性能将急剧下降。特别是训练任务反复读取同一份数据,每次都从远端存储系统拉取数据严重浪费存储系统的IO能力。许多机器学习的场景下无法直接使用云存储的底层存储的接口。很多情况下用户希望不同的机器之间的文件系统能够更加紧密地结合在一起,让一台主机上的用户可以像使用本机的文件系统一样使用远程机的文件系统。
链接(Link)功能可以提供对外部数据的链接机制。用户可能有很多数据已经存在了其它存储系统上,比如S3上,这些数据不太可能重新复制到本申请实施例提供的新的文件系统。新的文件系统的用户也有很多新的数据可能需要直接写入外部的S3或HDFS。如果用户希望使用统一的方式,比如类POSIX的方式统一访问这些数据,而不是根据不同的存储系统,编写不同的存储代码,通过外部链接机制可以很好的实现该目的。
针对上述问题,本公开实施例提出了的文件系统时一种基于POSIX的共享文件系统。例如,可以基于用户态文件系统(FUSE)的框架来实现本公开实施例提供的文件系统。本公开实施例提供的文件系统可以适配HDFS、S3、SFTP、LOCAL、MOCK(虚假的服务程序)等底层的外部存储(可以简称底层存储、外部存储或远端存储等)。用户可以像使用本地存储一样使用外部存储。POXIS访问的过程中,可以实现对底层存储的访问加速、链接(Link)等功能。
在一种具体示例中,本公开可以针对于AI场景下的存储系统,提出了一种基于POSIX语义的共享文件系统。由于需要适配多种底层存储,因此本公开实施例可以结合Linux的FUSE框架和多个底层存储技术进行统一设计和开发。系统可以支持POSIX接口、访问加速和数据共享、外部链接等能力。
本公开实施例的共享文件系统的总体架构的示例如图6所示,包括用户态文件系统(FUSE)接口层、虚拟文件系统的软件(VFS)抽象层、链接(Link)适配层、统一缓存层以及底层适配等模块的一个或多个。下面分别介绍每个模块的具体内容。
(1)FUSE接口层
FUSE可以是用来实现用户态文件系统的框架,主要包括以下部分:第一部分包括内核模块(例如fuse.ko),用来接收操作系统传递的I/O请求,并且将这个I/O请求通过“/dev/fuse”通道发送到用户态文件系统(即共享文件系统)。第二部分包括在用户态文件系统的动态链接库(例如libfuse),用来解析内核模块转发的协议包,并且将I/O请求发送给用户态程序。第三部分包括挂载(fusermount)的工具,负责路径的挂载和卸载。共享文件系统可以包括FUSE接口层,主要可以提供两种能力。例如,FUSE接口层包括的FS SDK,可以是文件和目录操作的SDK,用于提供开发者使用能力,支持用户调用API。再如,FUSE接口层包括的FUSE POSIX,当通过FUSE挂载后,FUSE接口层可以用来接收内核模块发送的请求和向VFS抽象层传递请求的中间层。
(2)VFS(虚拟文件系统)抽象层(可以简称VFS层)
VFS层用于在底层的文件系统和用户态之间建立虚拟文件系统的软件抽象层。实现的POXIX语义可以抽象为三种类型的接口,包括文件操作、目录操作以及属性操作等的抽象接口。
例如,文件操作可以包括open(打开文件)、close(关闭文件)、write(写文件)、read(读文件)、truancate(文件截断)等操作的一个或多个。目录操作主要可以实现mkdir(创建目录)、symlink(符合链接)、rmdir(删除目录)、unlink(删除链接)、opendir(打开目录)、readdir(读取目录)、closedir(关闭目录)和rename(重命名)等操作的一个或多个。属性操作可以包括stat(显示inode内容)、utimes(文件或目录的时间)、chmod(设定文件的权限)、chown(设置文件所有者和文件关联组)和chgrp(变更文件或者目录所属群组)等操作的一个或多个。
在VFS层可以提供索引节点(Inode)的结构和文件描述符的结构等FUSE基础结构。Inode内部可能包括一些处理逻辑;Inode内部可以包括锁、添加、删除子树等逻辑。文件描述符,是在打开文件或目录会创建的描述符。文件描述符用于记录符号ID、读写方法、文件描述符所属的锁等(上述的I/O请求中可能带着文件描述符,作为文件读写打开的依据)。其中,锁表示一种读写限制。例如,同一时间不能同时对一个文件执行多个写操作,但是能同时读一个文件,有利于维护文件的读写一致性。此外,FUSE基础结构还包括:目录树、I/O接口等。
(3)链接(Link)层
VFS层可以向Link层发节点标识例如Inode号。Link层获取Inode号对应的Link列表。根据Inode号找到文件系统的内部路径。如果根据内部路径的前缀可以在Link列表中匹配到Link路径,则可以根据Link路径找到远端路径。其中,Link列表中可以保存Link路径。根据文件系统的内部路径的前缀可以在Link列表查找对应的Link路径,进而找到远端路径,然后可以通过远端路径换掉内部路径。
例如,Link层主要可以执行以下步骤。
步骤1:Link列表的同步和加载。当FUSE启动时,可以指定从服务端(Server)获取文件系统详情以及对应的Link列表详情(即链接信息的示例),并在内存维护一个Link列表。并且FUSE端(FUSE客户端)定时从Server拉取当前文件系统绑定的列表。当Link列表发生变更(例如,创建、删除)时,多个fuse通过从服务端拉取远端的Link进行变更。
步骤2:FUSE处理Link的逻辑。例如,VFS层对上层屏蔽底层存储细节,又作为抽象层对Fuse层和底层存储提供方法,因此可以在VFS层判断路径是否为Link路径(内部路径),并找到内部路径对应的底层存储驱动(Driver)进行处理。判断方法是通过步骤1获取的link列表,link列表是存在内存里的,并且会定时更新。考虑到不存在嵌套Link的情况,可以通过匹配路径前缀找到对应的Link存储例如底层存储。找到了对应的底层存储和真实路径以后,则可以将底层存储实际需要的路径信息和驱动信息请求发送给底层的存储接口。
共享文件系统中的Link层可以实现Link同步、Link加载和Link解析等功能。
如图7所示,在链接加载流程中,服务端系统提供链接的创建和删除(S701)。将多个链接信息构造为链接元信息(links meta),进行加密(S702)。链接元信息储存到数据库中,并将该文件系统全部的链接信息保存到远端存储目录例如links_config/links_meta.json(S703)。
如图8所示,在链接更新流程中,FUSE客户端可以定时获取链接元信息的文件例如links_meta.json(S801)。并且,内存中的信息记录最近一次修改的时间(S802)进行时间比较(S803),如果收到的文件的更新时间大于内存中的更新时间,可以读取链接元信息(links meta)并解密(S804),并对内存中的链接信息进行修改(S805)。
一种示例中,Link的处理逻辑可以参见图9。FUSE接口(Interface)处理文件系统操作(S901),可以包括操作(OP)、操作路径(path)等。VFS层处理可以包括查询UFS(UnixFile System,Unix文件系统)和路径(path)转换等(S902)。用内部的操作路径(path)查找是否包括链接(Link)路径(S903)。如果是,则使用链接(Link)对应的UFS处理操作(S904)。否则,使用默认UFS处理操作(S905)。
(4)统一缓存层
统一缓存层可以是在底层适配层和VFS层之前的中间层。统一缓存层用于接收VFS封装发送的请求,以及将原始数据返回给VFS层。统一缓存层主要可以用来缓存底层存储访问的数据。当请求的数据在缓存层能够获取且数据未过期时,可以将缓存的数据返回给VFS。否则,缓存层可以继续调用底层适配层的接口。当获取到底层适配层的数据后,除了将数据返回给VFS层以外,还需要将请求的数据存储到本地缓存或者内存中。利用缓存层,可以减少对底层存储的访问次数,并且可以解决底层存储带宽与IOPS(Input/OutputOperations Per Second,每秒进行读写操作的次数)能力限制,导致I/O效率不高的问题。
统一缓存层可以包括两部分,一部分是自身的元数据信息和目录项的缓存(元信息缓存,meta cache),一部分是文件内容的缓存(数据缓存,data cache)。
Meta cache模块可以支持内存、本地磁盘以及分布式缓存的存储,由K-V的存储组件将底层的存储介质封装成统一的K-V操作API,支持Get、Set、Dels、ScanRange等操作。Meta API对底层的Meta操作进行封装,提供Posix兼容的API,如LookUp(查询)、GetAttr(找文件属性)、Opendir(打开目录)、ReadDir(读取目录)、Access(访问)等。元信息缓存模块为本公开实施例的共享文件系统提供了目录项和文件元数据信息的缓存。
Data cache模块可以承担存储文件数据的角色,主要负责数据的加载、预读、切分、存储和Cache空间的管理,并向上层例如Link层提供文件数据读写的接口。Data cache模块也支持内存和本地磁盘以及分布式缓存的存储方式,提供统一的缓存操作API,支持Set、Get、Del和缓存清理操作。Data cache模块支持数据缓存(DataCache)的管理,可以定时淘汰和清理过期的缓存,动态统计本地磁盘大小。例如,数据的拆分如图10所示,文件在挂载地址中按照块(block)进行划分,在内存中按照页(page)进行划分。数据读写请求可以按照“内存→本地磁盘/分布式缓存→远端存储”的流程执行。本公开实施例的系统支持从远端存储预读多个文件块(block)到本地缓存、支持多并发获取多个block数据,也同时可动态调整block大小。也支持内存(memory)和本地(local)的缓存(cache)管理能力。内存(memory)支持LRU(Least Recently Used,最近最少使用)的缓存淘汰策略,可动态设置缓存大小。本地(local)模式则可以根据本地磁盘大小计算容量,当缓存(cache)空间不够,触发淘汰策略清理部分缓存(cache)数据。
Cache的读取有多种情况,可以根据偏移量(offset)和尺寸(size)确定是否已有数据缓存(data cache)来区分。第一种情况:全部不存在、存在已过期,则根据offset和size,从远程存储获取包括(offset,offset+size)的多个block到本地cache。这一步会预读;然后从cache返回数据。第二种情况:部分存在,从远程存储获取包括不存在部分的多个block到本地cache;然后从cache返回数据。第三种情况:全部存在未过期,从cache返回数据。
如图11所示,是未命中缓存(Cache Miss)的读取数据流程的示例。缓存工作(Cache worker)模块初始化缓存(init cache)。元信息缓存(meta cache)模块发现无分块(no blocks),即未命中。数据缓存(data cache)模块通过缓存加载器(Cache Loader)进行处理,分块(cut blocks),读取缓存(read cache)。如果缓存未命中,预读(read Ahead),从UFS中读取文件(read file),可以向内存(mem)中写入块(write block),还可以将文件块异步(async)写入磁盘(disk)。判断是否已经处理完最后一个块(last blocks),如果没有,则继续读取缓存,如果是,则可以结束流程。
如图12所示,是命中缓存(Cache Hit)的读取数据流程的示例。缓存工作(Cacheworker)模块初始化缓存(init cache)。元信息缓存(meta cache)模块发现元信息和块(Found meta&blocks)。数据缓存(data cache)模块通过缓存加载器(Cache Loader)进行处理,并控制读取器(Reader)读取缓存(read cache)。先读取内存缓存(mem cache),如果内存缓存有所需的块,则判断是否是最后一个块(last blocks)。如果不是最后一个块,则继续读取缓存,如果是最后一个块则结束流程。如果内存缓存没有所需的块,可以读取数据缓存(data cache)。如果数据缓存有所需的块,则判断是否是最后一个块(last blocks)。如果不是最后一个块,则继续读取缓存,如果是最后一个块则结束流程。如果数据缓存没有所需的块,则清理缓存元信息和数据(clean cache meta&data)。
基于meta cache模块和data cache模块,对底层存储的访问不再需要每次I/O操作都变成一次远程访问。例如,在训练数据集为大量小文件场景下,可能反复读取同一份数据。这种情况下,只需要执行一次远端存储系统拉取数据,后面的读取过程可以从缓存直接返回数据给用户,不再调用远端存储系统,保证了存储系统的I/O能力。
(5)底层适配层
底层适配层可以是整个共享文件系统的最下面的一层。底层适配层接收未命中缓存的那部分请求,将这些请求发送给远端存储。从远端存储获取到数据后,返回给缓存层。底层适配层可以对接多种底层存储,并且将数据返回给底层存储。例如,可以适配的底层存储可以包括S3(是一种对象存储,可以适配目录)、HDFS、SFTP和LOCAL等类型。
示例1,通过HDFS Go SDK,共享文件系统能够直接替代HDFS,为Hadoop提供低成本的海量存储。
示例2,通过S3网关(Gateway),使用S3作为存储层的应用可直接接入,接入S3对象存储需要进行大量的适配和优化工作。首先对象存储是没有目录的概念,需要利用对象存储bucket的命名判断当前请求对象是否是目录。例如,可以利用路径末尾是否带有“/”进行判断,如果是目录,会将对象的属性设置为目录的属性。
由于S3没有目录的概念,所以S3的接口只提供文件的重命名(rename)操作,也需要支持目录级别的rename等。rename的场景包括文件之间和目录之间的重命名。目录重命名的方式可以通过对象存储的list获取目录内容后,将目录下的所有桶(bucket)进行复制(copy)。copy的新的文件名可以是重命名(rename)下的文件。重命名的操作是并发的,重命名完之后,会将原来的bucket删除。写请求可以通过S3的MPU(MultipartUpload,分片上传)方式和放置(put)的方式执行。小文件写入可以直接使用put的方式写入文件。大文件可以采用MPU的方式进行写入,例如,先发送初始化分片上传(initializeMultipartUpload)请求到服务(server)端。S3客户端收到该请求后,会分配一个上传标识(uploadId),返回给请求者。文件系统通过底层适配层可以将大文件切分为若干个分片,然后可以并行地将文件分片的数据和uploadId发送到S3客户端。当将所有分片的数据全部发送成功后,会发送一个完成分片上传(completeMultipartUpload)请求给服务(server)端。S3客户端收到这个请求后,将这个大文件标记完成。
示例3,SFTP的底层存储的实现可以通过SFTP提供的GOSDK进行调用。
示例4,LOCAL的实现可以调用I/O库和系统调用库进行底层适配。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图13示出了可以用来实施本公开的实施例的示例电子设备1300的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图13所示,设备1300包括计算单元1301,其可以根据存储在只读存储器(ROM)1302中的计算机程序或者从存储单元1308加载到随机访问存储器(RAM)1303中的计算机程序,来执行各种适当的动作和处理。在RAM 1303中,还可存储设备1300操作所需的各种程序和数据。计算单元1301、ROM 1302以及RAM 1303通过总线1304彼此相连。输入/输出(I/O)接口1305也连接至总线1304。
设备1300中的多个部件连接至I/O接口1305,包括:输入单元1306,例如键盘、鼠标等;输出单元1307,例如各种类型的显示器、扬声器等;存储单元1308,例如磁盘、光盘等;以及通信单元1309,例如网卡、调制解调器、无线通信收发机等。通信单元1309允许设备1300通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元1301可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1301的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1301执行上文所描述的各个方法和处理,例如文件系统的操作方法。例如,在一些实施例中,文件系统的操作方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1308。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1302和/或通信单元1309而被载入和/或安装到设备1300上。当计算机程序加载到RAM 1303并由计算单元1301执行时,可以执行上文描述的文件系统的操作方法的一个或多个步骤。备选地,在其他实施例中,计算单元1301可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行文件系统的操作方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (21)
1.一种文件系统的操作方法,包括:
接收文件系统的操作请求,所述文件系统的操作请求中包括操作信息和节点标识;
根据所述节点标识查找操作路径;
根据所述操作路径确定操作对象;
对所述操作对象执行所述操作信息对应的操作,
其中,根据所述节点标识查找操作路径,包括:根据所述节点标识在目录树中查找操作路径;
根据所述操作路径,查找存储在本地的链接列表中是否存在与所述操作路径匹配的链接路径;
在所述操作路径存在匹配的链接路径的情况下,根据所述链接路径从远端获取所述操作对象,
在所述操作路径不存在匹配的链接路径的情况下,根据所述操作路径从文件系统的本地缓存中获取所述操作对象。
2.根据权利要求1所述的方法,根据所述操作路径确定操作对象,包括:在所述操作路径存在匹配的链接路径的情况下,根据所述链接路径获取远端路径;根据所述远端路径确定远端存储中的所述操作对象。
3.根据权利要求2所述的方法,还包括:
根据所述操作路径的前缀,查找所述链接列表中是否存在与所述操作路径匹配的链接路径。
4.根据权利要求1所述的方法,还包括:
从服务端获取文件系统对应的链接列表信息;
根据所述链接列表信息,比较内存中的第一链接列表与服务端的第二链接列表的更新时间;
在所述第一链接列表的更新时间在所述第二链接列表的更新时间之前的情况下,根据所述链接列表信息更新所述第一链接列表。
5.根据权利要求1所述的方法,其中,所述文件系统的本地缓存包括:
元信息缓存,用于缓存元数据信息和目录项;
数据缓存,用于缓存文件内容,所述数据缓存用于执行数据的加载、预读、切分、存储和缓存空间的管理,并提供文件数据读写的接口。
6.根据权利要求5所述的方法,还包括:
在所述数据缓存中未命中操作对象的情况下,根据偏移量和文件尺寸,从远端存储中预读多个文件块;其中,所述偏移量是携带在文件系统的操作请求中的,所述文件尺寸是根据所述文件系统的操作请求中携带的缓存大小确定的需要预读的文件块的总量。
7.根据权利要求1所述的方法,远端存储包括对象存储、Hadoop分布式文件系统HDFS、安全文件传送协议SFTP和本地文件系统LOCAL的至少之一,所述方法还包括:对对象存储、HDFS、SFTP和LOCAL的至少之一进行适配。
8.根据权利要求1至7中任一项所述的方法,接收文件系统的操作请求,包括:
通过抽象接口从文件系统接口层接收所述文件系统的操作请求,所述抽象接口是基于可移植操作系统接口POXIX语义抽象得到的接口。
9.根据权利要求8所述的方法,所述抽象接口包括文件操作抽象接口、目录操作抽象接口以及属性操作抽象接口;
其中,文件操作的抽象接口包括以下至少之一:打开文件接口、关闭文件接口、写文件接口、读文件接口、文件截断接口;
所述目录操作的抽象接口包括以下至少之一:创建目录接口、符合链接接口、删除目录接口、删除链接接口、打开目录接口、读取目录接口、关闭目录接口和重命名接口;
所述属性操作的抽象接口包括以下至少之一:显示节点内容接口、文件或目录的时间接口、设定文件的权限接口、设置文件所有者和文件关联组接口和变更文件或者目录所属群组接口。
10.一种文件系统,包括:
接收模块,用于接收文件系统的操作请求,所述文件系统的操作请求中包括操作信息和节点标识;
操作路径查找模块,用于根据所述节点标识查找操作路径;
操作对象确定模块,用于根据所述操作路径确定操作对象;
操作模块,用于对所述操作对象执行所述操作信息对应的操作,
其中,所述路径查找模块用于根据所述节点标识在目录树中查找操作路径,
所述文件系统还包括:链接路径查找模块,用于根据所述操作路径,查找存储在本地的链接列表中是否存在与所述操作路径匹配的链接路径,
所述操作对象确定模块用于:在所述操作路径存在匹配的链接路径的情况下,根据所述链接路径从远端获取所述操作对象;在所述操作路径不存在匹配的链接路径的情况下,根据所述操作路径从文件系统的本地缓存中获取所述操作对象。
11.根据权利要求10所述的系统,其中,所述操作对象确定模块用于在所述操作路径存在匹配的链接路径的情况下,根据所述链接路径获取远端路径;根据所述远端路径确定远端存储中的所述操作对象。
12.根据权利要求11所述的系统,还包括:
链接路径查找模块,用于根据所述操作路径的前缀,查找所述链接列表中是否存在与所述操作路径匹配的链接路径。
13.根据权利要求10所述的系统,还包括:
链接更新模块,用于从服务端获取文件系统对应的链接列表信息;用于根据所述链接列表信息,比较内存中的第一链接列表与服务端的第二链接列表的更新时间;在所述第一链接列表的更新时间在所述第二链接列表的更新时间之前的情况下,根据所述链接列表信息更新所述第一链接列表。
14.根据权利要求10所述的系统,其中,所述文件系统的本地缓存包括:
元信息缓存,用于缓存元数据信息和目录项;
数据缓存,用于缓存文件内容,所述数据缓存用于执行数据的加载、预读、切分、存储和缓存空间的管理,并提供文件数据读写的接口。
15.根据权利要求14所述的系统,还包括:
预读模块,用于在所述数据缓存中未命中操作对象的情况下,根据偏移量和文件尺寸,从远端存储中预读多个文件块;其中,所述偏移量是携带在文件系统的操作请求中的,所述文件尺寸是根据所述文件系统的操作请求中携带的缓存大小确定的需要预读的文件块的总量。
16.根据权利要求10所述的系统,其中,远端存储包括对象存储、Hadoop分布式文件系统HDFS、安全文件传送协议SFTP和本地文件系统LOCAL的至少之一,所述系统还包括:
适配模块,用于对对象存储、HDFS、SFTP和LOCAL的至少之一进行适配。
17.根据权利要求10至16中任一项所述的系统,所述接收模块用于通过抽象接口从文件系统接口层接收所述文件系统的操作请求,所述抽象接口是基于可移植操作系统接口POXIX语义抽象得到的接口。
18.根据权利要求17所述的系统,所述抽象接口包括文件操作抽象接口、目录操作抽象接口以及属性操作抽象接口;
其中,文件操作的抽象接口包括以下至少之一:打开文件接口、关闭文件接口、写文件接口、读文件接口、文件截断接口;
所述目录操作的抽象接口包括以下至少之一:创建目录接口、符合链接接口、删除目录接口、删除链接接口、打开目录接口、读取目录接口、关闭目录接口和重命名接口;
所述属性操作的抽象接口包括以下至少之一:显示节点内容接口、文件或目录的时间接口、设定文件的权限接口、设置文件所有者和文件关联组接口和变更文件或者目录所属群组接口。
19.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-9中任一项所述的方法。
20.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-9中任一项所述的方法。
21.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210553298.3A CN114756509B (zh) | 2022-05-19 | 2022-05-19 | 文件系统的操作方法、系统、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210553298.3A CN114756509B (zh) | 2022-05-19 | 2022-05-19 | 文件系统的操作方法、系统、设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114756509A CN114756509A (zh) | 2022-07-15 |
CN114756509B true CN114756509B (zh) | 2023-03-24 |
Family
ID=82335304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210553298.3A Active CN114756509B (zh) | 2022-05-19 | 2022-05-19 | 文件系统的操作方法、系统、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756509B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117610060B (zh) * | 2024-01-19 | 2024-03-29 | 成都理工大学 | 一种基于多核并行的多媒体文件混合加解密方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7904447B1 (en) * | 2008-01-22 | 2011-03-08 | Intuit Inc. | Method and system for directing local data access from a remote system |
CN110334063A (zh) * | 2019-07-15 | 2019-10-15 | 深圳前海微众银行股份有限公司 | 文件系统的操作方法、装置、设备及计算机可读存储介质 |
CN113779091A (zh) * | 2021-09-15 | 2021-12-10 | 贵阳货车帮科技有限公司 | 信息查询方法、装置、电子设备及可读存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7840618B2 (en) * | 2006-01-03 | 2010-11-23 | Nec Laboratories America, Inc. | Wide area networked file system |
CN102143215B (zh) * | 2011-01-20 | 2013-04-10 | 中国人民解放军理工大学 | 一种基于网络的pb级云存储系统及其处理方法 |
CN103944958A (zh) * | 2014-03-14 | 2014-07-23 | 中国科学院计算技术研究所 | 一种广域文件系统及实现方法 |
CN104317956A (zh) * | 2014-11-13 | 2015-01-28 | 北京奇虎科技有限公司 | 基于云端服务器的查询、存储空间清理方法和系统 |
CN106933872A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 一种通过传统文件系统接口访问云存储服务的方法及装置 |
CN112507298A (zh) * | 2020-11-30 | 2021-03-16 | 北京达佳互联信息技术有限公司 | 用户鉴权方法、装置、服务器以及存储介质 |
CN114116613A (zh) * | 2021-11-26 | 2022-03-01 | 北京百度网讯科技有限公司 | 基于分布式文件系统的元数据查询方法、设备和存储介质 |
-
2022
- 2022-05-19 CN CN202210553298.3A patent/CN114756509B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7904447B1 (en) * | 2008-01-22 | 2011-03-08 | Intuit Inc. | Method and system for directing local data access from a remote system |
CN110334063A (zh) * | 2019-07-15 | 2019-10-15 | 深圳前海微众银行股份有限公司 | 文件系统的操作方法、装置、设备及计算机可读存储介质 |
CN113779091A (zh) * | 2021-09-15 | 2021-12-10 | 贵阳货车帮科技有限公司 | 信息查询方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114756509A (zh) | 2022-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10659554B2 (en) | Scalable caching of remote file data in a cluster file system | |
US7587400B2 (en) | Suspending a result set and continuing from a suspended result set for transparent session migration | |
US11176099B2 (en) | Lockless synchronization of LSM tree metadata in a distributed system | |
US20120089579A1 (en) | Compression pipeline for storing data in a storage cloud | |
CN107045530A (zh) | 一种将对象存储系统实现为本地文件系统的方法 | |
US20120089775A1 (en) | Method and apparatus for selecting references to use in data compression | |
US20200183906A1 (en) | Using an lsm tree file structure for the on-disk format of an object storage platform | |
US9600486B2 (en) | File system directory attribute correction | |
EP3796185B1 (en) | Virtual database tables with updatable logical table pointers | |
CN110069431B (zh) | 基于RDMA和HTM的弹性Key-Value键值对数据存储方法 | |
US9075722B2 (en) | Clustered and highly-available wide-area write-through file system cache | |
US11620310B1 (en) | Cross-organization and cross-cloud automated data pipelines | |
US20180075159A1 (en) | Efficient property graph storage for streaming / multi-versioning graphs | |
US20180181582A1 (en) | Atomic Execution Unit for Object Storage | |
US20180018367A1 (en) | Remote query optimization in multi data sources | |
CN114756509B (zh) | 文件系统的操作方法、系统、设备以及存储介质 | |
US10222994B2 (en) | Storing selected data in a stub file in a hierarchical storage management system | |
CN113821487B (zh) | 本地文件系统实现方法、装置、设备及存储介质 | |
US9229969B2 (en) | Management of searches in a database system | |
US10606805B2 (en) | Object-level image query and retrieval | |
US11455305B1 (en) | Selecting alternate portions of a query plan for processing partial results generated separate from a query engine | |
US11727003B2 (en) | Scaling query processing resources for efficient utilization and performance | |
CN115794819A (zh) | 一种数据写入方法及电子设备 | |
US11055266B2 (en) | Efficient key data store entry traversal and result generation | |
CN113051244A (zh) | 数据访问方法和装置、数据获取方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |