文件快照方法及装置、电子设备和存储介质与流程

文档序号:22124702发布日期:2020-09-04 17:03阅读:228来源:国知局
文件快照方法及装置、电子设备和存储介质与流程

本公开涉及计算机技术领域,尤其涉及一种文件快照方法及装置、电子设备和存储介质。



背景技术:

文件系统快照技术是容器技术中软件管理的基础存储技术。文件系统快照技术可以在存储设备发生应用故障或者存储的数据出现损坏的情况下,将数据恢复到某个可用时间点的状态记录。快照可以是数据的一个副本,也可以是数据的一个复制品。

目前,实现文件系统快照的主流方法可以分为全拷贝快照技术以及差分快照技术,这些文件系统快照技术会一定程度上引起数据访问的延迟。



技术实现要素:

本公开提出了一种分层文件系统的文件快照技术方案。

根据本公开的一方面,提供了一种分层文件系统的文件快照方法,包括:响应于接收到对目标文件的写入请求,将所述写入请求携带的数据写入读写层创建的最新版本快照;在确定满足数据拷贝触发条件的情况下,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

具体地,在接收到写入请求的情况下,可以在不对所述目标文件的原始数据进行拷贝的情况下进行数据写入,从而减少数据写入延迟,提高数据写入效率。而在满足数据拷贝触发条件的情况下,所述目标文件的至少一份底层数据拷贝到读写层,从而使得读写层包含目标文件的更多数据,能够避免在接收到数据读取请求的情况下频繁去底层读取数据,从而提高数据读取效率。

所述分层文件系统的读写层用于存储所述目标文件的最新版本快照。

在一个或多个可选实施例中,所述将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中,包括:根据所述目标文件的至少一份底层数据的缺失次数属性值,将所述至少一份底层数据拷贝到所述读写层中的最新版本快照中,其中,所述缺失次数属性值用于指示所述读写层接收到的所述底层数据的访问请求的次数。

在一个或多个可选实施例中,在一个或多个可选实施例中,所述将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中,包括:基于所述至少一份底层数据在优先队列中的排列次序,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中;其中,所述优先队列中的至少一份数据是基于所述至少一份数据各自的缺失次数属性值进行排列的,所述优先队列的至少一份数据包含所述至少一份底层数据。

在一个或多个可选实施例中,所述方法还包括:响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,将所述第一数据添加到优先队列,或者,更新所述第一数据在优先队列中的排列次序。

在一个或多个可选实施例中,所述方法还包括:在所述优先队列当前已满的情况下,将所述第一数据的缺失次数属性值与所述优先队列中当前已有的第二数据的缺失次数属性值进行比较;在所述第一数据的缺失次数属性值大于所述第二数据的缺失次数属性值的情况下,将所述第二数据从所述优先队列中移除并将所述第一数据添加至所述优先队列。

在一个或多个可选实施例中,所述方法还包括:响应于满足数据拷贝截止条件,停止对所述至少一份底层数据的拷贝,其中,所述数据拷贝截止条件包括下列中的至少一项:所述优先队列为空、进行所述数据拷贝的时间达到预设时间阈值、高负载事件发生。

在一个或多个可选实施例中,所述方法还包括:响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,更新所述第一数据的缺失次数属性值。

在一个或多个可选实施例中,所述将目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中,包括:通过后台进程将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

在一个或多个可选实施例中,所述方法还包括:获取在目标监测时间间隔内目标文件的访问请求数量;在所述访问请求数量低于预设数量阈值的情况下,确定满足所述数据拷贝触发条件。

在一个或多个可选实施例中,所述获取在目标监测时间间隔内目标文件的访问请求数量,包括:在发生对所述目标文件的访问事件或监测超时事件的情况下,获取在目标监测时间间隔内目标文件的访问请求数量。

根据本公开的一方面,提供了一种分层文件系统的文件快照装置,包括:

写入模块,用于响应于接收到对目标文件的写入请求,将所述写入请求携带的数据写入读写层创建的最新版本快照;

拷贝模块,用于在确定满足数据拷贝触发条件的情况下,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

在一个或多个可选实施例中,所述拷贝模块,用于根据所述目标文件的至少一份底层数据的缺失次数属性值,将所述至少一份底层数据拷贝到所述读写层中的最新版本快照中,其中,所述缺失次数属性值用于指示所述读写层接收到的所述底层数据的访问请求的次数。

在一个或多个可选实施例中,所述拷贝模块,用于基于所述至少一份底层数据在优先队列中的排列次序,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中;其中,所述优先队列中的至少一份数据是基于所述至少一份数据各自的缺失次数属性值进行排列的,所述优先队列的至少一份数据包含所述至少一份底层数据。

在一个或多个可选实施例中,所述拷贝模块,还用于响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,将所述第一数据添加到优先队列,或者,更新所述第一数据在优先队列中的排列次序。

在一个或多个可选实施例中,所述拷贝模块,还用于在所述优先队列当前已满的情况下,将所述第一数据的缺失次数属性值与所述优先队列中当前已有的第二数据的缺失次数属性值进行比较;在所述第一数据的缺失次数属性值大于所述第二数据的缺失次数属性值的情况下,将所述第二数据从所述优先队列中移除并将所述第一数据添加至所述优先队列。

在一个或多个可选实施例中,所述拷贝模块,还用于响应于满足数据拷贝截止条件,停止对所述至少一份底层数据的拷贝,其中,所述数据拷贝截止条件包括下列中的至少一项:所述优先队列为空、进行所述数据拷贝的时间达到预设时间阈值、高负载事件发生。

在一个或多个可选实施例中,所述拷贝模块,还用于响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,更新所述第一数据的缺失次数属性值。

在一个或多个可选实施例中,所述拷贝模块,用于通过后台进程将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

在一个或多个可选实施例中,所述装置还包括:获取模块,用于获取在目标监测时间间隔内目标文件的访问请求数量;确定模块,用于在所述访问请求数量低于预设数量阈值的情况下,确定满足数据拷贝触发条件。

在一个或多个可选实施例中,所述获取模块,用于在发生对所述目标文件的访问事件或监测超时事件的情况下,获取在目标监测时间间隔内目标文件的访问请求数量。

根据本公开的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为:执行上述文件快照方法。

根据本公开的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述文件快照方法。

在本公开实施例中,可以响应于接收到对目标文件的写入请求,将写入请求携带的数据写入读写层创建的最新版本快照,在确定满足数据拷贝触发条件的情况下,将目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。这样,可以在不对目标文件的原始数据进行拷贝的情况下进行数据写入,从而减少数据写入延迟,提高数据写入效率,通过在满足数据拷贝触发条件的情况下对底层数据拷贝,可以减少在底层读取目标文件的数据,从而提高数据读取效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。

根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。

图1示出根据本公开实施例的分层文件系统的文件快照方法的流程图。

图2示出根据本公开实施例的底层数据拷贝一示例的框图。

图3示出根据本公开实施例的数据写入过程一示例的框图。

图4示出根据本公开实施例的文件快照创建过程一示例的框图。

图5示出根据本公开实施例的文件快照切换过程一示例的框图。

图6示出根据本公开实施例的文件快照合并过程一示例的框图。

图7示出根据本公开实施例的文件读取过程一示例的框图。

图8示出根据本公开实施例的分层文件系统的文件快照装置一示例的框图。

图9示出根据本公开实施例的电子设备一示例的框图。

具体实施方式

以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括a、b、c中的至少一种,可以表示包括从a、b和c构成的集合中选择的任意一个或多个元素。

另外,为了更好地说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。

在分层文件系统中,在接收到文件写请求的情况下,可以将目标文件的原始数据拷贝到分层文件系统的最高层,即读写层中,然后再对读写层中的数据执行写入操作。然而,这种方式会引起文件写入的延迟,影响文件写入的效率。本公开实施例提供的分层文件系统,可以在写入请求的执行过程中,在不将快照对象的原始数据拷贝到读写层的情况下,直接将更新的数据写入读写层创建的稀疏文件中,即最新版本快照中,从而降低由于数据拷贝而造成的对写入请求的延迟处理,提高对写入请求的处理效率,随后,在满足数据拷贝触发条件的情况下,将目标文件的至少一份底层数据拷贝到读写层,从而可以提高对读取请求的处理效率。

本公开实施例提供的文件快照方案,可以应用于多种类型文件的快照任务中,例如,应用于图像文件、文本文件的快照任务中,还可以应用于任何对文件进行读或写的场景。本公开实施例不对具体的应用场景进行限制,只要包括本公开实施例提供的分层文件系统的快照方案均在本公开的保护范围内。下面对本公开实施例提供的分层文件系统的文件快照方案进行说明。

图1示出根据本公开实施例的分层文件系统的文件快照方法的流程图。该方法可以由终端设备、服务器或其它类型的电子设备执行,其中,终端设备可以为用户设备(userequipment,ue)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(personaldigitalassistant,pda)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该文件快照方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。下面以电子设备作为执性主体为例对本公开实施例提供的分层文件系统的文件快照方案进行说明。

s11,响应于接收到对目标文件的写入请求,将所述写入请求携带的数据写入读写层创建的最新版本快照。

在本公开实施例中,分层文件系统可以是用于存储一个或多个文件的分层存储系统,分层文件系统包括多个层,每个层可以存储文件的一个版本快照,其中,每个版本快照包含文件的至少一部分数据,例如,一个存储层可以存储当前版本快照相对于上一个版本快照进行修改的数据部分,但本公开实施例不限于此。在一些实施例中,该多个层的存储空间可以位于同一个设备中,或者也可以分布于不同设备中。在一些可选实施例中,多个层中的最上层可以为读写层,支持数据读取操作和数据写入操作,下面的一层或至少两层为只读层,仅支持数据读取操作。相应地,在接收到写入请求的情况下,可以将数据写入到当前读写层,或者将当前读写层变更为只读层,并且创建新的读写层,即完成最新版本快照的创建,然后在新的读写层进行数据写入。

这里,写入请求可以是对目标文件进行写入的请求。电子设备可以接收其他设备发送的写入请求,或者,电子设备可以根据用户操作生成写入请求。写入请求中可以携带待写入目标文件的数据。写入请求中还可以携带待写入的数据在目标文件中写入的数据范围,从而可以响应于接收到对目标文件的写入请求,可以将写入请求携带的数据写入分层文件系统的读写层的最新版本快照中。通过将待写入的数据写入读写层的最新版本快照中,相比于将目标文件的全部数据写入最新版本快照中,可以降低目标文件各个版本的快照所占用的存储空间,减少目标文件的修改引起的延迟。

这里,写入请求中携带的待写入数据的数据范围可以指示待写入的数据在目标文件的开始位置以及结束位置。例如,数据范围可以包括由数据偏移量和数据长度,从而可以根据数据偏移量确定写入数据的开始位置,再将数据偏移量和数据长度相结合,可以确定写入数据的结束位置。

s12,在确定满足数据拷贝触发条件的情况下,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

在本公开实施例中,在确定满足数据拷贝触发条件的情况下,可以所述目标文件的一份或多份底层数据拷贝到读写层,例如,根据读写层中不存在的至少一份底层数据的数据量、重要程度等,将读写层中不存在的一份或多个底层数据依次拷贝到读写层,从而可以使读写层中目标文件的最新版本快照的数据具有连续性,减少从底层读取目标文件的数据的读取时间。

这里,数据拷贝触发条件可以根据实际应用场景进行设置。一个可选实现方式中,数据拷贝触发条件可以包括分层文件系统当前空闲或者低负载的情况,以使得对分层文件系统中的文件的访问尽可能少地受到数据拷贝的影响。作为一个例子,数据拷贝触发条件可以包括:目标文件或分层文件系统在特定时间间隔内的访问请求数量小于预设数量阈值,相应地,在特定时间间隔内对目标文件或分层文件系统的访问请求数量小于预设数量阈值的情况下,将目标文件的至少一份底层数据拷贝到读写层。

在一些实施例中,如果目标监测时间间隔内对目标文件或分层文件系统的访问量较少,目标文件或分层文件系统的访问压力较小,可以识别为低负载事件或低负载状态,此时,可以将目标文件的至少一份底层数据拷贝到读写层,实现目标文件快照的闲时拷贝,大幅度降低分层存储数据碎片对目标文件的读性能的影响。

在一些实施例中,如果目标监测时间间隔内对目标文件或分层文件系统的访问量较大,目标文件或分层文件系统的访问压力较大,可以识别为高负载事件或高负载状态,此时,数据拷贝会影响对访问请求的处理效率,可以继续进行监测,直到检测到低负载事件。

其中,以上低负载事件和高负载事件的识别标准可以基于需求确定,例如,在目标监测时间间隔内对目标文件或分层文件系统的访问数量低于第一预设数量阈值的情况下,确定为低负载事件,而在上述访问数量高于第二预设数量阈值的情况下,确定为高负载事件,其中,第一预设数量阈值和第二预设数量阈值可以根据具体应用场景或需求进行设置,例如,可以将第二预设数量阈值设置为第一预设数量阈值的2倍,但本公开实施例对此不做限定。

底层数据可以是分层文件系统中除读写层之外的其他层(例如只读层)中存储的数据。读写层中可以存储目标文件的最新版本快照,可以是分层文件系统中多个层中的顶层。其他层中存储的快照版本低于最新版本快照,相对于读写层而言是底层,因此,可以将其他层中存储的数据统一称为底层数据,也就是说,这里的底层数据包括位于读写层之下的一个或多个层(如只读层)中存储的数据,本公开实施例对此不做限定。读写层中不存在该至少一份底层数据,即读写层中不包括的特定数据范围的底层数据,在接收到对该底层数据的访问请求(如读取请求)的情况下,读写层需要从底层(即位于读写层之下的某个层)读取该底层数据。

在一个或多个可能的实现方式中,可以通过后台进程将所述目标文件的至少一份底层数据拷贝到读写层的最新版本快照中。

具体地,在满足数据拷贝触发条件的情况下,可以启动后台进程,通过后台进程将至少一份底层数据拷贝到读写层中的最新版本快照中。通过开启后台进程执行目标文件的至少一份底层数据拷贝,由于后台进程可以隐藏在后台,从而后台进程执行目标文件的至少一份底层数据拷贝的操作通常不会对前台界面造成影响,从而减少底层数据的拷贝对用户界面的干扰,提高用户体验。。

在一个或多个可能的实现方式中,根据目标文件的至少一份底层数据的缺失次数属性值,将至少一份底层数据拷贝到读写层的最新版本快照中,其中,缺失次数属性值用于指示读写层接收到的所述底层数据的访问请求的次数。

具体地,缺失次数属性值可以用于指示读写层接收到的底层数据的访问请求的次数。分层文件系统中存储的至少一份底层数据可以具有对应的缺失次数属性值,根据底层数据的缺失次数属性值,可以将至少一份底层数据拷贝到读写层中,例如,根据缺失次数属性值由大到小的顺序,优先将缺失次数属性值最大的底层数据拷贝到读写层,从而当再次访问目标文件的最新版本快照的情况下,可以直接在读取层中获取到最新版本快照包括的至少一份底层数据,减少从底层的存储层中查找底层数据的次数,提高数据访问效率。

需要说明是,缺失次数属性值的统计周期与监测时间间隔可以不同,例如,可以将缺失次数属性值的统计周期设置为大于监测时间间隔,例如,设置为1天、1周等。一些实现方式中,缺失次数属性值可以作为一份底层数据的一个属性,缺失次数属性值可以记录接收到的该底层数据从始至终的访问请求的次数。

在一个或多个可能的实现方式中,响应于接收到对目标文件中的第一数据的访问请求且在读写层中未找到所述第一数据,更新第一数据的缺失次数属性值。

具体地,接收目标文件中第一数据的访问请求,然后可以根据访问请求在分层文件系统的读写层中查找第一数据,在读写层中未找到第一数据的情况下,可以更新第一数据的缺失次数属性值。举例来说,在接收到目标文件中第一数据的访问请求的情况下,如果在读写层中没有查找到第一数据,而在底层的存储层中查找到需要访问的第一数据,则可以将第一数据的缺失次数属性值加1。通过对缺失次数属性值进行更新,可以使缺失次数属性值实时反映一份底层数据的访问情况。

在一个可能的实现方式中,可以基于至少一份底层数据在优先队列中的排列次序,将所述目标文件的至少一份底层数据拷贝到读写层的最新版本快照中。其中,优先队列中的至少一份数据是基于至少一份数据各自的缺失次数属性值进行排列的,优先队列的至少一份数据包含至少一份底层数据。

具体地,可以将读写层中不存在的至少一份底层数据存放在优先队列中,例如,根据至少一份底层数据的缺失次数属性值,生成包括至少一份数据有序排列的优先队列,优先队列中的至少一份数据可以包含至少一份底层数据。在对底层数据进行拷贝的情况下,可以根据至少一份底层数据在优先队列的排列次序,将目标文件的至少一份底层数据拷贝到读写层的最新版本快照中,例如,按照至少一份底层数据在优先队列中的排列次序,依次将至少一份底层数据拷贝到读写层中的最新版本快照中。优先队列中的每份数据可以具有相应的缺失次数属性值,优先队列中至少一份数据可以按照各自的缺失次数属性值进行排列。至少一份数据中的一份底层数据在优先队列的排列次序与该底层数据的缺失次数属性值相关,例如,一份底层数据的缺失次数属性值越大,该份底层数据的排列次序越靠前。相应地,可以优先将优先队列中排列次序最靠前的底层数据优先拷贝到读写层中。通过底层数据在优先队列中的排列次序,可以将至少一份底层数据拷贝到读写层中,从而可以利用优先队列对读写层中不存在的至少一份底层数据进行整理,便于底层数据的拷贝。

在一个或多个可能的实现方式中,响应于接收到对目标文件中的第一数据的访问请求且在读写层中未找到第一数据,将第一数据添加到优先队列,或者,更新第一数据在优先队列中的排列次序。

具体地,可以接收目标文件中第一数据的访问请求,然后可以根据访问请求在分层文件系统的读写层中查找第一数据,在读写层中未找到第一数据的情况下,可以将第一数据的缺失次数属性值加1。在优先队列中不存在第一数据的情况下,可以将第一数据添加到优先队列中,例如,根据第一数据的缺失次数属性值,确定第一数据在优先队列中的排列次序,根据确定的排列次序,将第一数据添加到优先队列中。或者,在第一数据已经在优先队列中的情况下,可以根据第一数据的缺失次数属性值对第一数据在优先队列中的排列次序进行更新,例如,可以将第一数据的缺失次数属性值与排列次序在第一数据之前的数据进行比较,如果第一数据的缺失次数属性值大于排列次序在第一数据之前的数据,则可以更新第一数据的排列次序使第一数据之前的数据的缺失次数属性值均大于第一数据的缺失次数属性值。通过本实现方式可以以第一数据为例,对通过优先队列整理底层数据的过程进行说明,使优先队列可以提供底层数据进行拷贝的顺序。

在本实现方式的一个示例中,在优先队列当前已满的情况下,将第一数据的缺失次数属性值与优先队列中当前已有的第二数据的缺失次数属性值进行比较,在第一数据的缺失次数属性值大于第二数据的缺失次数属性值的情况下,将第二数据从优先队列中移除并将第一数据添加至优先队列。

在本示例中,在将第一数据添加到优先队列的情况下,如果优先队列当前已满,可以在优先队列中已有的至少一份数据中随机选择一份第二数据,将第一数据的缺失次数属性值与第二数据的缺失次数属性值进行比较,在第一数据的缺失次数属性值大于第二数据的缺失次数属性值的情况下,可以将第二数据从优先队列中移除,并将第一数据添加至优先队列中第二数据所在的队列位置。在第一数据的缺失次数属性值小于或者等于第二数据的缺失次数属性值的情况下,可以取消第一数据的添加操作,或者,可以在优先队列中已有的至少一份数据中选择另一份数据作为第二数据,继续进行缺失次数属性值的比较,直到第一数据的缺失次数属性值大于第二数据的缺失次数属性值,或者,直到优先队列中没有未进行缺失次数属性值比较的第二数据。通过本示例提供的方案,可以快速地将第一数据添加到优先队列中。

在一个或多个可能的实现方式中,优先队列中至少一份数据可能无序排列,一份数据可以具有根据缺失次数属性值确定的优先级,例如,一份数据的缺失次数属性值越大,该份底层数据的优先级越高。在将目标文件的至少一份底层数据拷贝到读写层的情况下,可以根据至少一份底层数据在优先队列的优先级,依次将目标文件的至少一份底层数据拷贝到读写层,例如,将优先级最高的底层数据优先拷贝到读写层,从而可以通过优先队列对目标文件的至少一份底层数据进行整理,便于底层数据的拷贝。

在一个或多个可能的实现方式中,响应于满足数据拷贝截止条件,停止对至少一份底层数据的拷贝,其中,数据拷贝截止条件包括下列中的至少一项:优先队列为空、进行数据拷贝的时间达到预设时间阈值、检测到高负载事件的发生。

具体地,在将目标文件的至少一份底层数据拷贝到读写层的过程中,可以判断是否满足数据拷贝截止条件,在满足数据拷贝截止条件的情况下,可以停止对至少一份底层数据的拷贝。例如,在完成对其中一份底层数据的拷贝之后,可以判断是否有下列情况发生:优先队列为空、进行数据拷贝的时间达到预设时间阈值、高负载事件发生。在一些实施例中,如果优先队列为空,则表明当前没有需要拷贝的其他底层数据,从而可以停止底层数据的拷贝操作。在一些实施例中,在进行数据拷贝的时间达到预设时间阈值的情况下,例如,可以在上一监测时间间隔检测到低负载事件的情况下,在当前监测时间间隔开始后进行上述数据拷贝,此时,可以设置预设时间阈值,并且在进行数据拷贝的时间达到预设时间阈值的情况下,停止底层数据的拷贝操作。这里,作为一个例子,预设时间阈值可以设置为当前监测时间间隔结束的时间,但本公开实施例不限于此。在一些实施例中,如果检测到高负载事件发生,例如,在当前监测时间间隔检测到对目标文件或分层文件系统的访问数量超过第二预设数量阈值,则可以认定为高负载事件,此时,为了不影响当前的数据访问,可以终止当前的底层数据拷贝。可选地,数据拷贝截止条件也可以包括其他类型的条件,通过对数据拷贝截止条件进行合理设置,可以停止对至少一份底层数据的拷贝,从而减少底层数据的拷贝对目标文件的访问性能的影响。

图2示出根据本公开实施例的底层数据拷贝一示例的框图。这里,低负载事件可以是目标监测时间间隔内目标文件的访问请求数量小于第一预设数量阈值的情况触发的事件。当低负载事件发生之后,可以执行至少一份底层数据的拷贝操作,从而可以依次将从优先队列中读取的底层数据拷贝到读写层中,直到达到上述数据拷贝截止条件。这样,可以在空闲或者访问较少的情况下,对目标文件的至少一份底层数据进行拷贝,从而可以减少底层数据拷贝对读写性能的影响。

本公开实施例可以通过接收的目标文件的访问请求监测分层文件系统中目标文件的访问压力,可以在闲时唤醒后台进程执行底层数据的拷贝。通过后台进程可以将较被频繁访问的底层数据拷贝到读写层中,使目标文件的最新版本快照的数据具有连续性。

在一个或多个可能的实现方式中,在将写入数据写入分层文件系统中的读写层中之前,还可以在读写层不存在稀疏文件的情况下,在读写层中创建稀疏文件。然后将写入数据写入分层文件系统中读写层的稀疏文件中。

具体地,在将写入数据写入分层文件系统中的读写层中之前,如果分层文件系统中的读写层中不存在稀疏文件,则可以创建一个稀疏文件作为写入数据的载体,创建之后,将写入数据写入稀疏文件中,写入后的稀疏文件可以作为目标文件最新版本的快照。这里,稀疏文件可以是在文件中留有大量空余数据空间的一种文件。稀疏文件的内容大部分为空,从而可以利用稀疏文件作为写入数据的载体,从而更加高效地利用分层文件系统的存储空间。

在一个或多个可能的实现方式中,在将写入数据写入分层文件系统中的读写层中之后,还可以更新读写层所对应的数据范围。

具体地,可以根据写入数据的数据范围,对读写层对应的数据范围进行更新。例如,在稀疏文件中不存在原有数据的情况下,可以将写入数据的数据范围作为读写层对应的数据范围,在稀疏文件中存在原有数据的情况下,可以将原有数据的数据范围和写入数据的数据范围进行并运算,得到读写层所对应的数据范围。这里,可以将读写层对应的数据范围作为读写层中稀疏文件的拓展属性,通过稀疏文件的拓展属性,可以确定存储层中数据的数据范围。

图3示出根据本公开实施例的数据写入过程一示例的框图。举例来说,假设写入数据的数据范围是(300,400),在获取到目标文件的写入请求之后,可以将写入数据写入读写层4的稀疏文件的(300,400),然后可以更新读写层4对应的数据范围。这里,由于读写层4的稀疏文件的(150,250)存在原有数据,从而可以将原有数据的数据范围和写入数据的数据范围进行并运算,得到读写层4对应的数据范围为(150,250)和(300,400)。只读层1、只读层2、只读层3可以分别对应目标文件的一个版本快照。

本公开实施例还提供了文件快照的创建方式,下面通过一个实现方式对文件快照的创建方式进行说明。

在一个或多个实现方式中,电子设备可以获取快照创建请求,然后根据该快照创建请求可以将分层文件系统中的读写层转换为只读层,并在分层文件系统中插入一个最高层级的读写层,该读写层可以对应目标文件的最新版本快照。这里,创建新的读写层快之后可以不将目标文件拷贝到读写层中,读写层可以保持为空,从而可以提高快照创建的效率。

图4示出根据本公开实施例的文件快照创建过程一示例的框图。其中,(1)可以表示当前版本快照创建之前,分层文件系统的结构。其中,分层文件系统可以包括3个存储层,分别为一个读写层和两个只读层,每个存储层对应目标文件的一个版本快照。(2)可以表示当前版本快照创建后,分层文件系统的结构。在接收到快照创建请求之后,可以将读写层3转换为只读层3,然后插入一个最高层级的读写层4。

本公开实施例还提供了文件快照的切换方式,下面通过一个实现方式对文件快照的切换方式进行说明。

在一个实现方式中,电子设备可以获取快照切换请求,快照切换请求中可以携带有快照切换的版本号。然后可以将高于快照切换的版本号对应的存储层删除,并创建一个空的最高层级的读写层,完成快照版本的切换。

图5示出根据本公开实施例的文件快照切换过程一示例的框图。其中,(1)可以表示快照切换之前,分层文件系统的结构。其中,分层文件系统可以包括4个存储层,分别为一个读写层和三个只读层,每个存储层对应一个目标文件的版本快照。(2)可以表示快照切换之后,分层文件系统的结构。假设快照切换请求中携带的快照切换的版本号是2,则在接收到快照切换请求之后,可以将读写层4和只读层3删除,然后创建一个空的读写层3.b。

本公开实施例还提供了文件快照的合并方式,下面通过一个实现方式对文件快照的合并方式进行说明。

在一个实现方式中,电子设备可以获取快照合并请求,快照合并请求中可以携带有快照的合并版本号。然后可以将合并版本号对应的存储层中的文件合并到合并版本号对应的最高层级的存储层中,并将合并版本号对应的其他存储层删除,完成快照版本的合并。

图6示出根据本公开实施例的文件快照合并过程一示例的框图。其中,(1)可以表示多个版本快照合并之前,分层文件系统的结构。其中,分层文件系统可以包括4个存储层,分别为一个读写层和三个只读层,每个存储层对应目标文件的一个版本快照。(2)可以表示多个版本的快照合并之后,分层文件系统的结构。假设快照合并请求中携带的快照合并版本号是1-4,则在接收到快照合并请求之后,可以将只读层1至只读层3中的文件合并到读写层4中,然后将只读层1、只读层2、只读层3删除,从而完成快照版本的切换。

本公开实施例还提供了文件读取方式,下面通过一个实现方式对文件读取的过程进行说明。

在一个或多个可能的实现方式中,获取目标文件的读取请求,读取请求携带有读取数据的数据范围。然后可以在分层文件系统包括的至少一个存储层中,依次查找读取数据的数据范围对应的一个或多个存储层,从而返回查找到的一个或多个存储层中的读取数据。这里,分层文件系统的至少一个存储层包括读写层。

具体地,可以利用目标文件的至少一个版本快照对目标文件进行读取。在接收到读取请求的情况下,可以获取读取请求中携带的读取数据的数据范围。由于分层文件系统包括的一个或多个存储层,每个存储层可以对应目标文件的一个版本快照,读取数据可能分布在多个存储层中,从而可以在分层文件系统包括的一个或多个存储层中查找读取数据。每个存储层可以记录有该存储层中数据的数据范围,从而可以根据各个存储成中数据的数据范围,依次查找读取数据的数据范围对应的一个或多个存储层,然后返回查找到一个或多个存储层中的读取数据,实现目标文件中读取数据的读取。

在本实现方式的一个示例中,在分层文件系统包括的至少一个存储层中,可以按照至少一个存储层创建的先后顺序,依次查找一个或多个存储层,直到查找到包括读取数据的一个或多个存储层,或者,直到查找到至少一个存储层中的最后创建的存储层。

在本示例中,在查找读取数据的数据范围对应的一个或多个存储层的情况下,可以按照至少一个存储层创建的先后顺序,依次查找一个或多个存储层。这里,分层文件系统中的存储层可以按照存储层创建的先后顺序进行排列,创建在前的存储层位于分层文件系统的底部,创建在后的存储层位于分层文件系统的顶部。从而按照至少一个存储层创建的先后顺序依次查找一个或多个存储层,也可以理解为,是按照至少一个存储层由上至下的顺序,依次对一个或多个存储层进行扫描,直到查找到全部读取数据,或者,直到查找到最后创建的存储层,即,查找到最底层的存储层。这种方式可以利用分层文件系统存储的一个或多个版本快照实现对目标文件的快速读取。

图7示出根据本公开实施例的文件读取过程一示例的框图。在本示例中,获取的读取请求中携带的读取数据的数据范围可以是(0,1000),可以根据存储层创建的先后顺序,即,由上至下的顺序,依次对一个或多个存储层进行扫描,并读取扫描过程中每一个存储层的稀疏文件中数据的数据范围,直到搜集到(0,1000)的读取数据,或者,直到扫描完成最底层的存储层中的稀疏文件。然后可以返回(0,1000)的读取数据,将(0,1000)数据范围对应的读取数据存放到读缓存中,以供用户读取。

可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。

此外,本公开还提供了装置、电子设备、计算机可读存储介质、程序,上述均可用来实现本公开提供的任一种快照方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。

本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

图8示出根据本公开实施例的分层文件系统的文件快照装置的框图,如图8所示,所述装置包括:

写入模块21,用于响应于接收到对目标文件的写入请求,将所述写入请求携带的数据写入读写层创建的最新版本快照;

拷贝模块22,用于在确定满足数据拷贝触发条件的情况下,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中。

在一个或多个可选实施例中,所述拷贝模块22,用于根据所述目标文件的至少一份底层数据的缺失次数属性值的最新版本快照中,将所述至少一份底层数据拷贝到所述读写层中,其中,所述缺失次数属性值用于指示所述读写层接收到的所述底层数据的访问请求的次数。

在一个或多个可选实施例中,所述拷贝模块22,用于基于所述至少一份底层数据在优先队列中的排列次序,将所述目标文件的至少一份底层数据拷贝到所述读写层的最新版本快照中;其中,所述优先队列中的至少一份数据是基于所述至少一份数据各自的缺失次数属性值进行排列的,所述优先队列的至少一份数据包含所述至少一份底层数据。

在一个或多个可选实施例中,所述拷贝模块22,还用于响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,将所述第一数据添加到优先队列,或者,更新所述第一数据在优先队列中的排列次序。

在一个或多个可选实施例中,所述拷贝模块22,还用于在所述优先队列当前已满的情况下,将所述第一数据的缺失次数属性值与所述优先队列中当前已有的第二数据的缺失次数属性值进行比较;在所述第一数据的缺失次数属性值大于所述第二数据的缺失次数属性值的情况下,将所述第二数据从所述优先队列中移除并将所述第一数据添加至所述优先队列。

在一个或多个可选实施例中,所述拷贝模块22,还用于响应于满足数据拷贝截止条件,停止对所述至少一份底层数据的拷贝,其中,所述数据拷贝截止条件包括下列中的至少一项:所述优先队列为空、进行所述数据拷贝的时间达到预设时间阈值、高负载事件发生。

在一个或多个可选实施例中,所述拷贝模块22,还用于响应于接收到对所述目标文件中的第一数据的访问请求且在所述读写层中未找到所述第一数据,更新所述第一数据的缺失次数属性值。

在一个或多个可选实施例中,所述装置还包括:获取模块,用于获取在目标监测时间间隔内目标文件的访问请求数量;确定模块,用于在所述访问请求数量低于预设数量阈值的情况下,确定满足数据拷贝触发条件。

在一个或多个可选实施例中,所述获取模块,用于在发生对所述目标文件的访问事件或监测超时事件的情况下,获取在目标监测时间间隔内目标文件的访问请求数量。

在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。

本公开实施例还提出一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为上述方法。

电子设备可以被提供为终端、服务器或其它形态的设备。

图9是根据一示例性实施例示出的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。参照图9,电子设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。

电子设备1900还可以包括一个电源组件1926被配置为执行电子设备1900的电源管理,一个有线或无线网络接口1950被配置为将电子设备1900连接到网络,和一个输入输出(i/o)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由电子设备1900的处理组件1922执行以完成上述方法。

本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1