掌桥专利:专业的专利平台
掌桥专利
首页

一种分布式文件系统及其访问计量方法

文献发布时间:2023-06-19 19:28:50


一种分布式文件系统及其访问计量方法

技术领域

本申请涉及计算机技术领域,尤其涉及一种分布式文件系统及其访问计量方法。

背景技术

分布式文件系统是采用服务器(或计算机)集群来存储大量的文件,在逻辑上这些文件形成一个预先规划的统一的文件系统,故分布式文件系统也称为“集群文件系统”。当前此较流行的分布式文件系统有HDFS(Hadoop Distributed File System)、NAS(NetworkAttached Storage)、NFS(Network File System)、MooseFS(MooseFile System)等。分布式文件系统在向用户提供服务后,存在对用户针对数据节点的访问行为的计量的需求。在相关技术中,需要在分布式文件系统的基础上额外部署一离线的计量节点,同时在主元数据节点上配置相应的计量进程,由该计量进程定期从主元数据节点上拉取相关日志,并解析发送至离线的计量节点,最终由该计量节点计算数据并生成用户针对数据节点的访问行为的计量结果。

然而,在上述相关技术中提及的分布式文件系统的访问计量方案中,因为需要额外配置计量节点,也就相当于占用了额外的设备资源,增加了计量成本;并且因为该计量节点为离线部署,一般为按天计算,导致计量结果的时效性无法满足用户的需求;同时日志的拉取、加载、解析和传输会占用较长时长,导致需要数小时才能得到计量结果,影响整体的计量效率。

发明内容

为克服相关技术中存在的问题,本申请提供了一种分布式文件系统及其访问计量方法。

根据本申请实施例的第一方面,提供一种分布式文件系统的访问计量方法,所述分布式文件系统包括元数据节点和数据节点,所述元数据节点维护有所述数据节点所存储数据对应的元数据,所述方法包括:

在所述元数据节点的主进程的基础上派生出对应的子进程;

通过所述子进程获取所述主进程所维护的元数据,并遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。

根据本申请实施例的第二方面,提供一种分布式文件系统,所述分布式文件系统包括:

数据节点;

元数据节点,所述元数据节点维护有所述数据节点所存储数据对应的元数据,用于实现上述第一方面所述方法的步骤。

根据本申请实施例的第三方面,提供一种电子设备,包括:

处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现上述第一方面所述方法的步骤。

根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上储存有可执行指令;其中,该指令被处理器执行时,实现上述第一方面所述方法的步骤。

在本申请实施例中,通过在原有的元数据节点的主进程的基础上派生出对应的子进程,而由该子进程来实现对应的计量操作,也就避免了额外部署计量节点,节约了设备资源,降低了计量成本;并且因为子进程可以直接获取主进程所维护的元数据,无需再额外单独拉取日志,不仅可以实时获得计量结果,保证了计量结果的时效;还减小了计量结果的导出时长,提升了计量效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

此处的附图被并入说明书中并构成本申请的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1是本申请一示例性实施例提供的一种分布式文件系统的架构示意图;

图2是本申请一示例性实施例提供的一种分布式文件系统的访问计量方法的流程图;

图3是本申请一示例性实施例提供的一种目录树的示意图;

图4是本申请一示例性实施例提供的一种从元数据节点派生子进程进行计量的示意图;

图5是本申请一示例性实施例提供的一种主元数据节点轮询各从元数据节点的流程图;

图6是本申请一示例性实施例提供的一种一轮调度流程图;

图7是本申请一示例性实施例提供的一种计量失败的示意图;

图8是本申请一示例性实施例提供的一种计量结果写入集群的示意图;

图9是本申请一示例性实施例提供的一种电子设备的示意结构图;

图10是本申请一示例性实施例提供的一种分布式文件系统的访问计量装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是本申请一个或多个实施例的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。

分布式文件系统的整体架构一般可以分为三个部分:客户端(Client)、元数据节点(Master)和数据节点,当用户需要发起一次写入的时候,Client可以向Master创建一个文件,并且打开这个文件,此时Master会选好三个副本的位置反馈给Client。Client根据三个副本的位置找到数据节点,把数据写进去。从逻辑功能上来说,可以认为:Client做整体的控制,Master提供元数据的存储,数据节点提供数据的存储。由此,基于上述三个部分的协同配合可以向用户提供高性价比的在线存储服务。进一步的,分布式文件系统也存在用户针对在线存储服务的使用情况的计量需求,计量即指在分布式文件系统中,获取指定目录下,不同文件类型、不同副本、不同介质的文件大小、数量等信息。举例而言,可以根据该计量结果向用户出具账单、根据计量结果合理优化分布式文件系统的存储空间等。

由此,在相关技术中,提出了额外配置离线计量节点的解决方案。具体的,在主元数据节点上运行的计量进程可以从Master端拉取Checkpoint(检查点),通过加载该checkpoint而解析生成相应的目录列表(List),并将该List作为输出传递至离线额外部署的计量节点中,由该计量节点进行计算获得最终的计量结果。然而,在上述方案中,因为需要额外配置计量节点,也就相当于占用了额外的设备资源,增加了计量成本;并且,因为该计量节点为离线部署,一般为按天计算,导致计量结果的时效性无法满足用户的需求;同时计量进程针对日志的拉取、解析和List传输会占用较长时长,导致需要数小时才能得到计量结果,影响整体的计量效率。

有鉴于此,本申请提供一种改进后的分布式文件系统的访问计量方案,以解决相关技术中存在的问题,下面结合附图进行详细说明。

图1是本申请一示例性实施例提供的一种分布式文件系统的架构示意图,该架构可以包括客户端11、元数据节点(如主元数据节点12和从元数据节点13)和至少一个数据节点(如数据节点14、数据节点15和数据节点16)。

用户可以通过客户端11来发起针对数据节点的访问,从而完成数据的写入或读取等操作。而客户端11的形式可以是多样的,例如,其可以为web客户端或移动客户端等,本申请对此不进行限制。

元数据节点(Master)可以部署在一独立主机的物理服务器,或者该元数据节点可以部署在主机集群承载的虚拟服务器(如云服务器)。当然,虽然在图1所示的实施例中,主元数据节点12和从元数据节点13分别部署在不同的物理设备上,但在一些实施例中,主元数据节点12和从元数据节点13可以部署在同一物理设备上,本申请对此不进行限制。可以理解的是,分布式文件系统可以为一主多从的形式,即从元数据节点(从Master)的数量可以是多个,如2个从元数据节点或3个从元数据节点等,本申请对此不进行限制。基于该一主多从的形式,即便某一主元数据节点出现故障,也可以由任一从元数据节点来接替,从而保证集群的高可用,避免服务出现中断。进一步的,可以在元数据节点的主进程的基础上派生出对应的子进程,从而通过派生出的该子进程来进行计量操作,也就避免了额外部署计量节点,节约了设备资源,降低了计量成本。并且因为子进程和主进程之间的父子关系,使得子进程可以直接获取主进程所维护的元数据,也就无需再额外单独拉取日志,不仅可以实时获得计量结果,保证了计量结果的时效;还减小了计量结果的导出时长,提升了计量效率。

数据节点可以为部署在一独立主机的物理服务器,或者该数据节点可以部署在主机集群承载的虚拟服务器(如云服务器)。各数据节点可以维护有对应的数据副本,如3个数据节点可以维护有3个数据副本,从而基于副本的备份作用,保证用户存储的数据的安全可靠。不同的数据节点的存储介质可以不同,例如数据节点14的存储介质为SSD(固态硬盘),而数据节点15的存储介质为HDD(机械硬盘)。

基于上述分布式文件系统架构,本申请通过在原有的元数据节点的主进程的基础上派生出对应的子进程,而由该子进程来实现对应的计量操作,也就避免了额外部署计量节点,节约了设备资源,降低了计量成本;并且因为子进程可以直接获取主进程所维护的元数据,无需再额外单独拉取日志,不仅可以实时获得计量结果,保证了计量结果的时效;还减小了计量结果的导出时长,提升了计量效率。

图2是本申请一示例性实施例提供的一种分布式文件系统的访问计量方法的流程图,分布式文件系统可以包括元数据节点和数据节点,元数据节点维护有所述数据节点所存储数据对应的元数据,具体包括以下步骤:

步骤202、在所述元数据节点的主进程的基础上派生出对应的子进程。

元数据节点(Master)主要用于提供元数据的存储,从而实现如集群控制、目录树、文件到数据节点映射等功能。目录树是分布式文件系统的目录和文件的树形结构,其可以被记录于Master节点上。如图3所示,图3是本申请一示例性实施例提供的一种目录树的示意图。从根目录(“/”)开始,其下可以有两个目录(“a/”和“b/”),对应的目标“a/”下有1个文件(“file”)。故基于对元数据节点中记录的目录树进行遍历可以得到对应的计量结果,如存储介质、存储使用量、文件数量和目录数量等。

为了生成用户针对数据节点的访问行为的计量结果,首先可以在元数据节点的主进程的基础上派生(fork)出对应的子进程。Fork函数主要用于创建一个新的进程,通常调用fork函数的进程可以称之为父进程,而新的进程可以称之为子进程,所创建的进程(子进程)复制父进程的代码段、数据段等所有用户空间信息。所以fork函数也被称之为复刻、克隆函数等。派生出的子进程可以和主进程共享内存空间,fork函数在执行过程中,可以采用写时复制(Copy On Write)的方式更新内存。如前所述,当调用fork函数时,内核可以原样复制父进程的整个地址空间并把复制的那一份分配给子进程。但这种行为是非常耗时的,因为它需要:为子进程的页表分配页面、为子进程的页分配页面、初始化子进程的页表、把父进程的页复制到子进程相应的页中。而创建一个地址空间涉及许多内存访问,且在大多数情况下,这样做常常是毫无意义的,因为许多子进程通过装入一个新的程序开始它们的执行,这样就完全丢弃了所继承的地址空间。而采用写时复制(Copy On Write)的方式后,内核并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。只用在需要写入的时候才会复制地址空间,从而使各个进程拥有各自的地址空间。具体的,以计量为例,主进程接收到主元数据节点(Master)发送的Oplog后,只有在修改内存时,才会将对应的页(Page)的内存拷贝出来,且主进程的服务并未终止。基于上述写时复制的方式,可以避免拷贝大量根本就不会被使用的数据,节约系统资源,并且因为内存空间的共享,也就避免了再单独额外拉取日志(如Oplog、Checkpoint等)的过程,可以加快计量的计算效率。当然,可以理解的是,子进程的创建方式也并非局限于上述fork函数,其也可以是其他方式来创建,本申请对此并不进行限制。

如前所述,为了确保集群的高可用,元数据节点可以包括主元数据节点(主Master)和至少一个从元数据节点(从Master),从而即便主master出现异常,也可以由从master来接替,确保提供稳定的服务。故此时可以由主元数据节点或任一从元数据节点的主进程的基础上派生出对应的子进程。例如,以图1所示实施例为例,可以由主元数据节点12派生出对应的子进程,也可以由从元数据节点13派生出对应的子进程,本申请对此不进行限制。当然,因为主Master需要对外提供服务,假设由主Master来进行计量操作,可能会对服务造成干扰,造成服务的卡顿,故为了避免对外服务出现卡顿的现象,也可以仅由从Master来派生出子进程从而进行计量操作。如图4所示,图4是本申请一示例性实施例提供的一种从元数据节点派生子进程进行计量的示意图。其中,元数据节点可以包括主元数据节点(主Master)、从元数据节点(从Master-1和从Master-2),此时可以在从Master-2的主进程的基础上来派生(fork)出对应的子进程,且采用上述写时复制(Copy On Write)的方式来更新,从而可以避免拷贝大量根本就不会被使用的数据,节约系统资源。当然如前所述,主Master也可以派生出子进程从而执行计量操作,本申请对此不进行限制。需要说明的是,虽然图4所示的实施例中,可以通过执行fork函数来创建子进程,且子进程和主进程之间共享内存空间。但在一些实施例中,也可以由其他方式来创建子进程,对应的也可以通过其他方式来使子进程获取主进程所维护的元数据,而并不一定通过共享内存空间的方式。

从元数据节点的数量可以是多个,例如其可以是3个、5个或10个等,而假设仅由从元数据节点来派生出子进程(如图4所示),则为了计量的顺利进行,避免多个从节点均参与计量而造成计量混乱,可以由主元数据节点从多个从元数据节点中选取一个从元数据节点,以使该选取的从元数据节点进行计量操作。具体的,可以由所述主元数据节点通过下述方式选取:主元数据节点轮询各从元数据节点,以判断各从元数据节点是否正在进行计量;在判断结果表明各从元数据节点均未在进行计量的情况下,随机选取一从元数据节点作为所述任一从元数据节点。如图5所示,图5是本申请一示例性实施例提供的一种主元数据节点轮询各从元数据节点的流程图,主元数据节点的轮训可以包括以下步骤:

步骤502、主Master询问从Master-1是否正在进行计量。

步骤504、从Master-1向主Master反馈其未在进行计量。

步骤506、主Master询问从Master-2是否正在进行计量。

步骤508、从Master-1向主Master反馈其未在进行计量。

在集群的从元数据节点的数量为2的情况下(如:从Master-1和从Master-2),基于上述步骤502至步骤508后,主Master即可以判断各从Master均未在进行计量,故此时主Master可以随机选取一从Master作为进行计量的从Master。例如,主Master选取从Master-2。

步骤510、主Master向从Master-2发起计量。

而从Master-2在接收到主Master发起的计量请求后,即可在其主进程的基础上派生出子进程,从而基于该子进程进行计量操作。而主Master可以继续询问,执行步骤512。

步骤512、主Master询问从Master-1是否正在进行计量。

步骤514、从Master-1向主Master反馈其未在进行计量。

步骤516、主Master询问从Master-2是否正在进行计量。

步骤518、从Master-2向主Master反馈其正在进行计量。

在本轮询问中,因为从Master-2正在进行计量,不满足上述所说的“均未在进行计量”执行条件,故在本轮询问中主Master无需选取从Master。

步骤520、主Master询问从Master-2是否正在进行计量。

步骤522、从Master-2向主Master反馈其未在进行计量。

因为在步骤512至步骤518的询问中,从Master-2反馈其正在进行计量,故在本轮(步骤520至步骤522)询问中,仅询问从Master-2即可,而从Master-2反馈其未在进行计量,故可以确定,所有从Master均未在进行计量,故此时主Master可以再次随机选取一从Master作为进行计量的从Master。例如,主Master选取从Master-1。

步骤524、主Master向从Master-1发起计量。

当然,轮询的间隔时长可以根据实际情况所设置,如每隔10分钟询问一轮、每隔5分钟询问一轮等,本申请对此不进行限制。

假设从元数据节点均未进行计量,那么主元数据节点会随机选取一从元数据节点,而该从元数据节点响应于主元数据节点的选取,会立刻开始进行计量。如此可能存在不必要的系统开销。举例而言:分布式文件系统可以设置每隔2小时进行一次计量,而假设上一次计量刚结束,那么此时所有从元数据节点均未进行计量,就会立即触发计量的再次进行,但该计量操作的再次执行并没有实际价值(因为仅要求2小时计量一次),如此便浪费了系统资源。故为了避免上述情况的发生,分布式文件系统可以预设有计量间隔时长,如计量间隔时长为2小时,那么主元数据节点可以确定最近一次计量完成时刻与当前时刻的间隔时长;在判断结果表明各从元数据节点未进行计量的情况下且确定的间隔时长不小于所述预设计量间隔时长的情况下,再随机选取一从元数据节点作为所述任一从元数据节点。譬如,最近一次计量完成时刻为下午2点整,而预设计量间隔时长为2小时,那么主元数据节点在下午2点至下午4点期间,可以不必再次执行计量操作,从而避免多次进行不必要的计量操作所造成的资源的浪费。

从元数据节点在fork出子进程后,可以执行计量操作,但该计量操作的执行会占用该从元数据节点的系统资源,可能会对该从元数据节点的常规运行造成干扰,例如造成从元数据节点针对主元数据节点的日志同步效率的降低。故为了最大程度的减小对从元数据节点的干扰,分布式文件系统预设有同步差距范围,可以确定各从元数据节点与所述主元数据节点之间针对元数据的同步差距;从元数据的同步差距不大于预设同步差距范围的多个从元数据节点中,随机选取一从元数据节点作为所述任一从元数据节点。举例而言,分布式文件系统的各个从元数据节点需要与主元数据节点所维护的元数据保持一致,具体的可以通过日志同步的方法来实现。假设主Master上维护的操作日志(Oplog)的ID为100,从Master-1上维护的操作日志ID为98,从Master-2上维护的操作日志ID为93,预设同步差距范围为5,而从Master-1与主Master的日志同步差距为2,从Master-2与主Master的日志同步差距为7,故此时仅从Master-1的元数据的同步差距不大于预设同步差距范围,可以选择从Master-1进行计量操作。如此,可以使得从Master-2不受到计量的干扰,尽快与主Master的日志达成同步,最大程度的减小对从元数据节点的干扰。

图6是本申请一示例性实施例提供的一种一轮调度流程图,具体可以包括以下步骤:

步骤602、一轮调度开始。

步骤604、主元数据节点轮询各从元数据节点,判断各从元数据节点是否正在进行计量。

如前所述,主元数据库节点可以询问各个从元数据节点,判断每个从元数据节点是否正在进行计量。在判断结果表明各从元数据节点均未在进行计量的情况下,执行步骤606;否则执行步骤610,以结束本轮调度。

步骤606、根据最近一次计量完成时刻与当前时刻的间隔时长,确定是否需要新一轮计量。

例如,最近一次计量完成时刻与当前时刻的间隔时长为1小时,而分布式文件系统预设2小时产出一次计量结果,则此时不必进行新一轮计量,可以执行步骤610,以结束本轮调度,从而可以避免进行不必要的计量操作,避免对系统资源造成浪费;若分布式文件系统预设30分钟产出一次计量结果,则此时需要进行新一轮计量,可以执行步骤608。

步骤608、选择一个Oplog最新的从元数据节点,发起计量。

各从元数据节点与主元数据节点存在针对元数据的同步差距,故为了尽量不干扰同步状态落后的从元数据节点,可以选择Oplog最新的从元数据节点来执行计量操作,依此可以确保落后的从元数据节点尽快追赶上主元数据节点的日志进度,最大程度的减小对从元数据节点的干扰。

步骤610、一轮调度结束。

基于上述步骤602至步骤610可以实现在合适的时刻选取合适的从元数据节点,从而使该从元数据节点派生出子进程,继而进行计量操作,生成计量结果。

在一实施例中,可以响应于接收到的针对所述用户的访问行为的计量请求,临时在所述元数据节点的主进程的基础上派生出对应的子进程。例如,以从元数据节点为例,其可以接收到由主元数据节点发送的计量请求,从而临时在该从元数据节点的主进程的基础上派生出对应的子进程。该计量请求可以是由主元数据节点在选取该从元数据节点时所发送。

在多线程并发的情况下,可能会使用到多线程同步锁,从而避免多个线程访问一个资源时对资源的破坏。而在使用该多线程同步锁的情况下,派生出的子进程可能会存在计量失败的情况。如图7所示,图7是本申请一示例性实施例提供的一种计量失败的示意图。在时刻1时,线程1给某一资源使用了同步锁,从而对应的该资源仅线程1可以访问。在时刻2时,线程N进行了派生(fork)动作,由此派生出了运行有主线程的子进程,和运行有线程1至线程N的主进程。而主进程的线程1依旧持有该同步锁。时刻3时,因为子进程与主进程共享内存空间,故子进程中该资源依旧被上锁(同步锁会被子进程继承),子进程的主线程无法访问该资源。时刻4时,线程1在资源使用完成后,会选择释放锁,而因为采用“写时复制”的方式,对于子进程而言,子进程仅运行了fork所在的这个线程(主线程),其它线程没有运行(没有线程1),故该资源其一直处于上锁状态。时刻5时,线程N欲访问该资源,故执行了上锁操作,但对于子进程而言,该锁并未被释放,无法执行上锁操作,使得子进程无法访问被锁保护的资源。如此便会造成计量失败的情况下。有鉴于此,为了确保计量的正常进行,可以在确认元数据节点的主进程中运行的各线程均已释放多线程同步锁的情况下,在所述元数据节点的主进程的基础上派生出对应的子进程,由此可以避免出现上述子进程资源访问失败的情况的发生。

步骤204、通过所述子进程获取所述主进程所维护的元数据,并遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。

如前所述,子进程和主进程之间可以共享内存空间,从而使得子进程可以直接从共享的内存空间中获取元数据,也就省去了额外单独拉取操作日志的步骤,可以有效加快计量的效率。

通过子进程获取的元数据来执行遍历操作,可以生成对应的计量结果,具体的,可以对日历树进行遍历。而如前所述,fork动作执行后,一般默认运行为一个对应的主线程,而单线程的性能具有一定的局限性,故在一实施例中,可以基于所述子进程中运行的主线程创建对应的线程池;通过线程池中的多个线程获取所述主进程所维护的元数据,且并发遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。当然,在子进程和主进程之间共享内存空间的情况下,也可以通过线程池中的多个线程直接从共享的内存空间中获取元数据。由此通过线程池来并发遍历目录树可以大幅度提升计量的效率,加快计量结果的产出速度。

需要说明的是,本申请所述的访问行为的计量结果具体可以是指用户针对数据节点的数据存储情况的计量结果,譬如:用户以何种存储介质进行存储、用户具体的存储数据量大小、用户所存储的文件的数量、目录数量等,从而可以基于数据存储情况向用户出具对应的账单;当然本说明所述的访问行为也并非局限于上述用户的数据存储情况,其也可以是指用户针对数据节点的访问时长、用户的访问次数或者用户的访问数据量,例如:用户访问时长为30分钟、用户在24小时内访问了10次、用户读取了100M的数据量等,从而可以基于用户的访问次数、访问时长或访问数据量向用户出具对应的账单,故本申请对访问行为具体是指用户的数据存储情况还是用户的访问时长、访问次数等不进行限制。

在一实施例中,可以灵活的配置需要计量的目录,举例而言,如果对全集群进行计量,则计量结果文件也会计算在内,该部分并非是用户数据,需要屏蔽,从而提高计量结果的准确性。具体可以通过读取计量范围配置信息,计量范围配置信息包括需遍历计量范围和/或屏蔽计量范围;从而根据所述计量配置信息所指示的计量范围遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。示例性的,计量范围配置信息可以如下所示:

{'MeasureDir'://计量目录

'/':[0],

'/dfs/':[2]},

'IgnoreDir'://屏蔽的目录

['/dir_a/',

'/dir_b/']}

其中,MeasureDir即为计量目录,其可以设置有多个,每个目录后可以配置具体第几级目录,0表示本级,也就是本目录计量;IgnoreDir即为屏蔽的目录,在该实施例中具体的屏蔽掉了/dir_a/和/dir_b/ 。由此基于灵活的、自定义的配置计量的目录,可以有效提高计量结果的准确性,满足不同场景下的计量需求,使计量结果更贴合实际。当然,屏蔽的目录也并非局限于如前所述的计量结果文件,其可以根据实际需要灵活设置,本申请对此不进行限制。

在一实施例中,在生成计量结果后,可以将其存储至从元数据节点本地的存储空间内,如本地磁盘中,但仅存储在本地存储空间存在丢失数据的可能,故为了确保计量结果的可靠性,可以将计量结果写入至集群中。即在生成所述计量结果的情况下,可以将所述计量结果存储至所述元数据节点对应的本地存储空间;通过运行计量控制脚本,在所述元数据节点上创建所述计量结果对应的元数据并将所述计量结果作为对应的数据存储至数据节点。如图8所示,图8是本说明一示例性实施例提供的一种计量结果写入集群的示意图。Master进程在产出对应的计量结果后,可以将该计量结果存储至本地,之后该从元数据节点可以执行计量控制脚本,定期检查本地存储的计量结果,并判断该计量结果是否更新,若该计量结果更新,则可以调用分布式文件系统的二进制客户端,该二进制客户端区别于图1所示的客户端,从而将该计量结果写入至集群,通过集群多副本存储的方式,提升存储该计量结果的可靠性。

基于上述分布式文件系统的访问计量方法,可以获得对应的计量结果,示例性的,本说明提供的计量结果可以包括如下字段的内容:

cluster_name字段,可以表示集群的名称,如本次计量对应的集群名称可以为“XXX”;

dir_path字段可以表示目录名,如本次计量的目录名为“/abc/aa/”;

sub_dir_num字段可以为目录下的子目录数量;

sub_file_num字段可以为目录下的子文件数量;

sub_hardlink_num字段可以为目录下的硬链数量;

file_type字段:可以表示本次计量的文件类型,例如本次计量的文件类型为多副本;

max_copy_num字段和min_copy_num字段可以分别表示最大文件副本数、最小文件副本数;

oplog_id字段可以表示对应的操作日志的ID;

storage_type字段:可以表示存储介质,例如本次计量对应的存储介质为如前所述的HDD;

copy_num字段则可以对应介质的副本数量;

item_value字段可以为对应的统计结果;

file_num字段可以表示为符合item_key的文件数量;

hardlink_num字段可以表示为item_key的硬链数量;

logic_size字段可以表示为文件累积逻辑长度;

group_data_chunks字段表示数据量;

group_parity_chunks字段可以表示冗余量;

measure_timestamp字段可以表征计量起始的时间戳;

output_timestamp字段可以表征计量结果输出时间戳,而上述起始时间戳和输出时间戳之间的差值即可表征本次计量所耗费的时长。

当然计量结果与实际的计量需求所对应,并非局限于上述字段,例如,还可以增加用户ID等,其可以根据实际需求进行适应性调整,本申请对此不进行限制。

基于上述实施例可知,本申请通过在原有的元数据节点的主进程的基础上派生出对应的子进程,而由该子进程来实现对应的计量操作,也就避免了额外部署计量节点,节约了设备资源,降低了计量成本;并且因为子进程可以直接获取主进程所维护的元数据,无需再额外单独拉取日志,不仅可以实时获得计量结果,保证了计量结果的时效;还减小了计量结果的导出时长,提升了计量效率。

与前述方法的实施例相对应,本申请还提供了装置、电子设备以及存储介质的实施例。

图9是一示例性实施例提供的一种电子设备的示意结构图。请参考图9,在硬件层面,该设备包括处理器901、网络接口902、内存903、非易失性存储器904以及内部总线905,当然还可能包括其他功能所需要的硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器901从非易失性存储器904中读取对应的计算机程序到内存903中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

图10是一示例性实施例提供的一种分布式文件系统的访问计量装置的框图。请参考图10,所述分布式文件系统包括元数据节点和数据节点,所述元数据节点维护有所述数据节点所存储数据对应的元数据,所述装置可以包括:

派生单元1002,用于在所述元数据节点的主进程的基础上派生出对应的子进程;

遍历单元1004,用于通过所述子进程获取所述主进程所维护的元数据,并遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。

可选地,所述主进程和所述子进程之间共享内存空间,所述遍历单元1004具体用于:通过所述子进程从共享的内存空间中获取所述元数据。

可选的,所述元数据节点包括主元数据节点和至少一个从元数据节点。所述派生单元1002具体用于:在所述主元数据节点或任一从元数据节点的主进程的基础上派生出对应的子进程。

可选的,所述任一从元数据节点由所述主元数据节点通过下述方式选取:

所述主元数据节点轮询各从元数据节点,以判断各从元数据节点是否正在进行计量;

在判断结果表明各从元数据节点均未在进行计量的情况下,随机选取一从元数据节点作为所述任一从元数据节点。

可选的,所述分布式文件系统预设有计量间隔时长,以使所述主元数据节点确定最近一次计量完成时刻与当前时刻的间隔时长;在判断结果表明各从元数据节点未进行计量的情况下且确定的间隔时长不小于所述预设计量间隔时长的情况下,随机选取一从元数据节点作为所述任一从元数据节点。

可选的,所述分布式文件系统预设有同步差距范围,以使所述主元数据节点确定各从元数据节点与所述主元数据节点之间针对元数据的同步差距;从元数据的同步差距不大于预设同步差距范围的多个从元数据节点中,随机选取一从元数据节点作为所述任一从元数据节点。

可选的,所述派生单元1002具体用于:响应于接收到的针对所述用户的访问行为的计量请求,在所述元数据节点的主进程的基础上派生出对应的子进程。

可选的,所述派生单元1002具体用于:在确认所述元数据节点的主进程中运行的各线程均已释放多线程同步锁的情况下,在所述元数据节点的主进程的基础上派生出对应的子进程。

可选的,所述遍历单元1004具体用于:基于所述子进程中运行的主线程创建对应的线程池;通过线程池中的多个线程获取所述主进程所维护的元数据,且并发遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。

可选的,所述遍历单元1004具体用于:读取计量范围配置信息,所述计量范围配置信息包括需遍历计量范围和/或屏蔽计量范围;根据所述计量配置信息所指示的计量范围遍历获取的元数据以生成用户针对所述数据节点的访问行为的计量结果。

可选的,所述装置还包括:

脚本单元1006,用于在生成所述计量结果的情况下,将所述计量结果存储至所述元数据节点对应的本地存储空间;通过运行计量控制脚本,在所述元数据节点上创建所述计量结果对应的元数据并将所述计量结果作为对应的数据存储至数据节点。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本申请还提供了一种分布式文件系统,所述分布式文件系统包括:数据节点和元数据节点,所述元数据节点维护有所述数据节点所存储数据对应的元数据,用于实现如上述任一实施例所述的访问计量方法的步骤。关于该访问计量方法的相关说明,可以参考前述实施例的描述,此处不再赘述。

在一个典型的配置中,计算机设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

相关技术
  • 一种共享文件系统的访问方法、装置及设备
  • 分布式文件系统及分布式文件系统中访问数据资源的方法
  • 分布式文件系统及分布式文件系统中访问数据资源的方法
技术分类

06120115923823