使用基于云的对象存储的消除重复分布式文件系统的制作方法
【专利摘要】本发明题为“使用基于云的对象存储的消除重复分布式文件系统”。公开用于提供使用基于云的对象存储的消除重复的分布式文件系统的技术。在多种实施例中,接收要存储包含多个文件数据块的文件的请求。确定要存储所述多个块的至少子集。至少部分地通过提供指示来对所述请求予以响应,所述指示是要将包含所述文件的所述多个块中至少子集的两个或更多个块作为包含所述两个或更多个块的组合块数据的单个存储的对象来存储。
【专利说明】
使用基于云的对象存储的消除重复分布式文件系统
【背景技术】
[0001]分布式文件系统、文件贡献服务等均已提供。在一种方法中,客户端系统上运行的文件系统客户端、应用和/或代理可以接收客户端系统上运行的应用发出的文件系统调用,并且可以配置成对远程文件系统服务器,例如元数据服务器发出对应的调用。例如,为了存储或更新文件,文件系统客户端可以生成写请求并将其发送到文件系统源数据服务器。写请求可以标识期望写入文件的多个数据块。该元数据服务器可以配置成提供响应,该响应指示例如基于云的对象存储中客户端应将数据写入的一个或多个位置。
[0002]可以通过使用与可以优化基于云的或其他对象存储来存储对象的对象大小相比相对较小的数据块来优化一些文件系统特征,如消除重复(de-dup I i cat i on )。
【附图说明】
[0003]下文详细描述和附图中公开了本发明的多种实施例。
[0004]图1是图示分布式文件系统和环境的实施例的框图。
[0005]图2是图示客户端系统的实施例的框图。
[0006]图3是图示分布式文件系统的实施例的框图。
[0007]图4是图示用于将文件或其他文件系统对象存储在分布式文件系统中的过程实施例的流程图。
[0008]图5是图示用于将文件或其他文件系统对象存储在分布式文件系统中的过程实施例的流程图。
[0009]图6是图示用于存储与分布式文件系统关联的文件分段或“±夬”数据的过程实施例的流程图。
[0010]图7是图示用于访问分布式文件系统中存储的文件或其他文件系统对象的过程实施例的流程图。
[0011]图8是图示用于处理要访问分布式文件系统中存储的文件或其他文件系统对象的请求的过程实施例的流程图。
[0012]图9是图示分布式文件系统的实施例中使用的一组示例文件系统元数据表的框图。
[0013]图10是图示分布式文件系统的实施例中不同粒度级别的文件分割的示例的框图。
[0014]图11是图示用于配置分布式文件系统以存储文件数据的过程实施例的流程图。
[0015]图12是图示用于在分布式文件系统的实施例中存储文件数据的元数据表示例的框图。
[0016]图13是图示用于验证如存储在基于云的对象存储中的分布式文件系统数据的过程实施例的流程图。
[0017]图14是图示与验证分布式文件系统数据为存储在基于云的对象存储中结合来管理已缓存的文件数据的过程实施例的流程图。
[0018]图15是图示用于确定与多个文件数据块关联的存储的对象能够被删除的过程实施例的流程图。
【具体实施方式】
[0019]本发明能够采用多种方式实现,包括作为过程;装置;系统;组成物;包含计算机可读存储介质上的计算机程序产品;和/或处理器,如配置成执行耦合到处理器的存储器上存储和/或其提供的指令的处理器。在本说明书中,这些实现或本发明可以采用的任何其他形式可以称为技术。一般来说,在本发明范围内,可以改变所公开的过程的步骤的次序。除非另行指明,否则如描述为配置成执行任务的处理器或存储器的组件可以实现为在给定时间临时性地配置成执行该任务的通用组件或制造成执行该任务的特定组件。正如本文使用的,术语“处理器”是指配置成处理数据,如计算机程序指令的一个或多个装置、电路和/或处理核。
[0020]本发明的一个或多个实施例的详细描述是结合图示本发明原理的附图来给出的。本发明是结合此类实施例来描述的,但是本发明不限于任何实施例。本发明的范围仅由权利要求来限制,并且本发明涵盖多种替代、修改和等效物。在下文的详细描述中,阐述许多具体细节,以便透彻地理解本发明。这些细节是出于示例的目的提供的,并且无需这些具体细节的其中一些或全部,本发明可以根据权利要求来实施。为了简明的目的,与本发明相关的技术领域中公知的技术材料不予详细描述,以不致使本发明非必要地晦涩难懂。
[0021]公开一种消除重复分布式文件系统,其按以消除重复为目的的第一大小的块来分割文件但是将文件数据存储在远远更大对象中以便利用典型的基于云的对象存储的性能特点。在多种实施例中,客户端设备上运行的文件系统客户端将要存储的文件分割成第一大小的“块(chunks)”。将表示这些块的数据,如相应块的散列或其他表示发送到远程文件系统元数据服务器。该服务器执行消除重复处理以确定文件系统可能已经存储块中哪一个(如果有的话)。对于文件系统尚未存储的那些块,该服务器以指令响应客户端,该指令是要将多个块组合在组合的对象中并将通过HTTP PUT或其他请求将组合的对象的指令存储在基于云的对象存储中服务器使用例如统一资源定位符(URI)或服务器提供的其他定位符指定的位置处。
[0022]图1是图示分布式文件系统和环境的实施例的框图。在所示的示例中,分布式文件系统环境100包括多个客户端系统和/或设备,在图1中由客户端102、104和106表示。在所示示例中,客户端(无线方式或其他方式)连接到网络108,例如,局域网(LAN)、广域网(WAN)、因特网和/或一个或多个其他公众和/或专用网络的其中一种或多种。这些客户端能通过网络108访问文件系统元数据服务器110。相应客户端,如客户端102、104和106上的应用发出文件系统调用,这在多种实施例中促成对文件系统元数据服务器110发出对应的远程调用。例如,客户端上的文件系统客户端、代理或其他实体可以拦截或以其他方式接收该应用对本地(例如,原生)文件系统的调用,并且可以将此类调用重定向到配置成对文件系统元数据服务器110发出对应远程调用(例如,对于该应用透明地)的代理。
[0023]在所示的示例中,将包括文件系统中存储的对象的数据,如文件存储在基于云的对象存储112中。在一些实施例中,可以将文件分割成多个分段或“±夬”,将每个分段或块存储在基于云的对象存储中的对应位置中。对文件系统元数据服务器110发出文件系统调用,文件系统元数据服务器110将文件系统元数据存储在文件系统元数据存储装置114中,例如数据库或其他数据存储中。文件系统元数据服务器110可以在文件系统元数据存储114中存储例如,文件系统中存储并表示的每个文件其他对象的分段或“±夬”映射图。例如,对于每个文件名(例如,路径名),文件系统元数据服务器110可以在对应分段映射图中存储每个分段的散列或其他表示,以及对于每个分段,存储基于云的对象存储112中存储(或要存储)的分段的对应位置。其他文件系统元数据,如典型地由文件系统存储的元数据,可以由文件系统元数据服务器110存储在文件系统元数据存储114中。示例包括且不限于目录、文件或其他节点/对象名;父和/或子节点的标识;创建时间;创建和/或拥有对象的用户;上次修改时间和/或其他时间;文件结尾(EOF)或指示对象大小的其他值;如分类、访问控制列表等的安全性属性;和/或其他文件系统元数据。
[0024]虽然在图1所示的示例中,文件系统元数据服务器110和基于云的对象存储112示出为位于不同网络和/或物理位置中的分开的系统,但是,在其他实施例中,可以将文件系统元数据和文件系统内容数据存储在一起,例如都存储在基于云的资源上和/或都存储在企业或其他网络服务器等上。
[0025]图2是图示客户端系统的实施例的框图。在所示的示例中,图1的客户端系统/设备102示出为包括操作系统204提供的环境中运行的应用202。操作系统204包括内核(未示出)和配置成向应用(如应用202)提供服务和/或功能性的其他组件。例如,操作系统204可以包括和/或配置成提供对客户端系统102的原生文件系统(未示出)的访问。应用202可以配置成对原生文件系统发出文件系统调用,例如,存储应用202创建的文件或其他对象/使用应用202来修改、移动或删除此类对象等。在所示的示例中,应用202发出的文件系统调用(图2中由标记为“app”(202)的框中始发的向下指箭头表示)被内核模块(或其他组件)206拦截并被重定向到文件系统客户端(或其他文件系统代理)208。在一些实施例中,文件系统代理208包括用户空间中运行的客户端应用。在一些实施例中,文件系统代理208包括内核或其他操作系统组件或模块。本示例中的文件系统客户端208具有与之关联的本地缓存210。在多种实施例中,缓存210可以用于在将文件数据发送到远程存储装置(例如,图1的基于云的对象存储112)之前缓冲和/或以其他方式存储(stage)文件数据,和/或有助于访问对先前存储但是稍后可能请求对其访问的数据。
[0026 ]客户端系统102包括提供至网络(如图1的网络108 )的网络连接性的网络通信接口212。例如,在多种实施例中,来自app 202的访问远程存储的文件的请求可以促使文件系统客户端208通过网络通信接口 212对例如文件系统元数据服务器(如图1的服务器110)发出远程调用。
[0027]在多种实施例中,文件系统客户端208可以配置成在包括文件系统客户端208和/或缓存210的或以其他方式与之关联的元数据写缓冲中存储影响文件系统元数据的一个或多个文件系统操作和/或请求,而所述文件系统元数据包含该文件系统元数据中与文件系统客户端208持有文件系统元数据写租赁相关的部分。例如,作为应用(如图2的应用202)的本地文件系统调用的结果,可以将影响元数据的文件系统操作缓冲为已接收,并且可以异步地和/或在出现事件,例如接收到元数据写租赁“断点”事件已被接收到和/或已发生的指示时,将其传送到远程文件系统元数据服务器。例如,第二客户端系统可以指示要执行影响该文件系统元数据中与第一客户端系统持有租赁相关的部分的操作的期望和需求,导致向第一客户端系统发送“断点”通信,进而“刷新”缓冲中至少影响与持有租赁相关的元数据部分的那些操作。
[0028]图3是图示分布式文件系统的实施例的框图。在所示的示例中,客户端102通过基于安全会话的连接302与文件系统元数据服务器110通信。此外,客户端102通过TCP/IP或其他连接与基于云的对象存储112通信,该TCP/IP或其他连接使得客户端102能够通过HTTP“PUT”请求存储对象(例如,文件分段或“±夬”)以及通过HTTP “GET”请求检索分段(“±夬” )ο在多种实施例中,客户端102(例如,客户端102上运行的文件系统客户端或其他代理)通过安全连接302发送和接收分布式文件系统“控制面”通信(例如,更改或要求文件系统元数据的处理和/或使用的文件系统操作),而通过连接304发送的通信可以视为包含可存储和/或检索文件系统对象数据(即,分段或“±夬”)所采用的“数据面”。在所示的示例中,文件系统元数据服务器110有权访问活动目录306,在多种实施例中,活动目录306可以包含可用于认证客户端(如客户端102)的用户的信息。
[0029]在多种实施例中,其上已安装分布式文件系统客户端或其他代理的客户端可以存储如文件的文件系统对象。在多种实施例中,在接收到存储(或修改)文件系统对象的请求时,该文件系统客户端将对象分割成一个或多个分段或“±夬”,并计算每个分段或“±夬”的引用(例如,散列)。这些引用被包含在例如通过安全连接(如图3的连接302)发送到文件系统元数据服务器的文件系统请求中。该文件系统元数据服务器通过例如PUT请求将分段数据直接发送到基于云的对象存储中来返回文件系统客户端要用于将(非重复)分段/块存储在基于云的对象存储中的信息,所述PUT请求是通过连接,如图3所示的连接304来发送的。
[0030]图4是图示用于将文件或其他文件系统对象存储在分布式文件系统中的过程实施例的流程图。在多种实施例中,可以由客户端系统/设备上运行的文件系统客户端或其他代理,如图2的文件系统客户端208,在客户端系统或设备上执行图4的过程。在所示的示例中,从例如应用接收存储文件的请求(402)。将文件分割成一个或多个分段(404)。对于每个分段,计算分段引用,例如散列(406)。将包含分段散列的文件写请求发送到文件系统元数据服务器(408)。从文件系统元数据服务器接收一组统一资源定位符(URI)或其他指针(410)。在多种实施例中,该指针可以包含仅用于分布式文件系统尚未存储的那些分段的指针。使用接收的指针通过例如直接发送到基于云的对象存储的HTTP “PUT”请求来存储分段(412)。
[0031]图5是图示用于将文件或其他文件系统对象存储在分布式文件系统中的过程实施例的流程图。在多种实施例中,图5的过程可以由文件系统元数据服务器,如图1的文件系统元数据服务器110来执行。在所示的示例中,接收存储文件的请求(502)。创建将文件系统对象名和/或其他标识符(例如,文件名、路径名)与一组一个或多个分段引用(例如,散列值)关联的分段(“±夬”)映射图(504)。基于例如分段引用,识别不与分布式文件系统已经存储的分段重复的分段(506)。对于不重复的每个分段,计算存储位置(例如,至少部分地基于全部或部分分段引用)并且生成可用于将该分段直接存储在基于云的数据存储中的URI或其他指针(508)。在多种实施例中,由文件系统元数据服务器以加密方式对该URI或其他指针签名。URI可以具有过期时间,截至该过期时间,该URI必须被用于存储该分段。将这些URI发送到所接收要存储该文件的请求的始发文件系统客户端(510)。
[0032]图6是图示用于存储与分布式文件系统关联的文件分段或“±夬”数据的过程实施例的流程图。在多种实施例中,图6的过程可以基于云的对象存储,如图1的对象存储112来执行。在所示的示例中,接收与请求中指定的URI关联的“PUT”请求(602)。检查与该URI以及编码在该URI中的过期时间关联的加密签名(604)。例如,可以规定基于云的对象存储来检查该URI已由受信文件系统元数据服务器签名和/或该URI的过期时间尚未流逝。如果确定该URI是当前有效的(606 ),则将与该HJT请求关联的有效负载数据,例如文件系统对象分段或“±夬”数据存储在与该URI关联的位置中(608 )。如果确定该URI不是有效的(606),则HJT请求失败(610),并且文件系统客户端接收到指示它必须从文件系统元数据服务器获取新URI的响应。
[0033]在多种实施例中,其上已安装分布式文件系统客户端或其他代理的客户端可以检索如文件的文件系统对象。在多种实施例中,在接收到访问文件系统对象的请求时,文件系统客户端通过例如安全连接(如图3的连接302)向文件系统元数据服务器发送文件访问请求。文件系统元数据服务器通过例如经连接(如图3的连接304)发送的GET请求返回文件系统客户端要用于直接从基于云的对象存储中检索分段/块的信息(例如,例如一个或多个URI或其他指针)。
[0034]图7是图示用于访问分布式文件系统中存储的文件或其他文件系统对象的过程实施例的流程图。在多种实施例中,可以由客户端系统/设备上运行的文件系统客户端或其他代理,如图2的文件系统客户端208,在客户端系统或设备上执行图4的过程。在所示的示例中,从应用接收要访问文件系统对象(例如文件名标识的文件)的请求(702)。向文件系统元数据服务器发送请求以检索文件(704)。从文件系统元数据服务器接收一组分段引用,以及对于每个分段引用,接收对应URI和加密密钥(706)。检查本地缓存以确定缓存是否有任何所需的分段(708)。对于缓存中没有的所有分段,使用关联的URI从基于云的对象存储发送检索该分段的GET请求,并且一旦以加密形式从对象存储接收到该分段,使用关联的密钥将该分段解密(710)。使用这些分段重构该文件,并向所接收访问请求的始发应用提供对该文件的访问权(712)。
[0035]图8是图示用于处理要访问分布式文件系统中存储的文件或其他文件系统对象的请求的过程实施例的流程图。在多种实施例中,图5的过程可以由文件系统元数据服务器,如图1的文件系统元数据服务器110来执行。在所示的示例中,接收访问命名的文件的请求(802)。检索与文件关联的分段映射图,并使用该分段映射图来确定一组分段引用(例如,散列),以及对于每个分段引用,确定指示该分段存储在基于云的分段存储中的位置的对应URI以及可用于将该分段解密的加密密钥(804)。将这些分段引用、URI和密钥返回到所接收文件访问请求的始发文件系统客户端(806)。
[0036]图9是图示分布式文件系统的实施例中使用的一组示例文件系统元数据表的框图。在多种实施例中,可以由文件系统元数据服务器,如图1和图3的文件系统元数据服务器110创建并维护图9的表902、904和906。在所示的示例中,使用索引节点表902来存储将每个命名的文件系统对象,例如目录、文件或其他对象与对应索引节点或其他唯一性编号或标识符关联的数据。在多种实施例中,使用块映射图表904来对应于每个文件以及对应于该文件为存储而被拆分成的一个或多个分段(块)中每一个来存储该块在文件内的偏移量、块标识符(块id)和其他元数据。例如,已作为三个块存储的文件在表904中将具有三个项(行),每个块对应于一个项。在多种实施例中,块id是单调递增的值,其中每个连续存储的块被赋予字母数字次序上连续的块id。在多种实施例中,一旦存储,块是不可变的。如果修改文件数据,则被影响的数据作为新块来存储并依序赋予下一个块id。由此,按定义具有较高块id的块将被存储在具有较低块id的块之后,并且可以假定自创建和存储起二者均未被修改过。
[0037]进一步参考图9,块元数据表906包含对应于每个块的一行,由块id标识(所示的示例中的列908),以及对应于每个块,包含指示该块的大小的元数据;其他元数据;指示当前有多少活动文件(或其他文件系统对象)引用该块的引用计数(列910);以及指示该块的状态的元数据,即,该块已验证还是已被删除(列912)。
[0038]在多种实施例中,当首先存储一个块时,该块最初被视为处于“未验证”状态,并且最初可以在表906的列912中存储反映该块未验证状态的元数据。验证可以由文件系统元数据服务器来执行,并且验证可以包括读取如存储在基于云的对象存储中的块,验证该块数据对应于文件系统所预期的(例如,计算如服务器读取的块的散列,并将该散列与该块的先前存储的散列(例如,从存储该块的文件系统客户端接收的散列)比较),以及一旦其通过验证,则更新表906中的状态元数据912以反映该块的“已验证”状态。
[0039]公开一种消除重复分布式文件系统,其按以消除重复为目的的第一大小的块来分割文件但是将文件数据存储在远远更大对象中以便利用典型的基于云的对象存储的性能特点。在多种实施例中,客户端设备上运行的文件系统客户端将要存储的文件分割成第一大小的“块”。将表示这些块的数据,如相应块的散列或其他表示发送到远程文件系统元数据服务器。该服务器执行消除重复处理以确定文件系统可能已经存储块中哪一个(如果有的话)。对于文件系统尚未存储的那些块,该服务器以指令响应客户端,该指令是要将多个块组合在组合的对象中并将通过HTTP PUT或其他请求将组合的对象的指令存储在基于云的对象存储中服务器使用例如统一资源定位符(URL)或服务器提供的其他定位符指定的位置处。
[0040]图10是图示分布式文件系统的实施例中不同粒度级别的文件分割的示例的框图。在所示的示例中,第一文件1002包含所示的数据,在本示例中为数据“A BCDE F”。在所存储的第一文件之后存储的第二文件1004包含数据“C DABE G”,其中相应文件1002和1004中的大写字母表示在每个文件中相同序号的数据字节,例如,第一文件1002开始处的“A”是与第二文件1004中系统大写字母“A”所表示的数据相同的数据。
[0041]在图10中,示出例如,可为了消除重复为目的使用的两个可能的分段和“±夬”大小。在第一示例中,示出块1006,每个块的大小对应于这些大写字母中的三个大写字母,这些大写字母表示分别包含文件1002和1004的数据。在此示例中,将文件1002和1004分割成如图所示大小的块1006,促成如第一文件1002和第二文件1004之间不会发现重复块。作为比较,以更细粒度(即,更小的块大小)分割文件1002和1004创建的一组块1008将促成显著改善的消除重复。在此示例中,确定文件1004的块1014为文件1002的先前存储的块1012的重复,以及确定文件1004的块1018为文件1002的先前存储的块1016的重复。在此示例中,文件1004的块1022不会确定为文件1002的任何先前存储的块的重复,在本例中是因为文件1004的块1022与文件1002的块1020(以及文件1002的其他块)之间不同。在所示的示例中,可以将文件分割成如图10所示的大小对应于个体大写字母的块实现更进一步的消除重复,因为如果使用该大小的块,则在查找文件1004不是文件1002中任何块的重复的情况下,仅对应于大写字母“G”的块。
[0042]图10的示例图示一般来说,更小大小的块可以比较大大小的块获得更高的消除重复获益。但是,如果使用太小的块,则与计算和存储块数据的散列来检测重复等关联的开销可能变得成本上太高。因此,典型地,是在通过相对较小块大小实现消除重复的更大获益与处理这些块所关联的开销之间达成平衡。
[0043]在分布式文件的多种实施例中,进一步考虑的是在基于云的对象存储(如图1的基于云的对象存储112)中存储块的效率。典型地,将此类基于云的对象存储优化以存储相对于针对消除重复以及相关开销的目的为最优的块大小要大得多的对象。例如,对于典型的基于云的对象存储,与存储对象关联的延迟和其他开销可能随大小达到某个大小而呈线性递增,但是对某个大小以外的对象趋于平稳,例如与针对其他目的(如消除重复)可能为最优的块大小相比相对较大的大小。为了利用此特点,在多种实施例或本文公开的分布式文件系统中,针对文件系统操作的目的将文件分割成有利于消除重复和/或其他文件系统操作的目的的块大小,但是在基于云的对象存储(如图1的对象存储112 )中,文件数据被存储在相对地远比该块大小大的大小的对象(本文中有时称为“团点(blobs)”以便将其与“文件”或“±夬”清楚地区分开)中。在多种实施例中,文件系统客户端可以配置成和/或被指令以将块组合成较大组合的对象,然后将组合的对象(或“团点”)存储在基于云的对象存储中。
[0044]图11是图示用于配置分布式文件系统以存储文件数据的过程实施例的流程图。在多种实施例中,图11的过程可以用于开发和配置分布式文件系统组件,如图2的文件系统客户端208和图1和/或图6的文件系统元数据服务器104。在所示的示例中,确定为实现有关消除重复和/或一个或多个其他文件系统目标的期望性能的块大小(I 102)。在多种实施例中,该确定可以完全或部分地基于领域知识、一组文件的全部或部分的静态分析、使用不同大小的块执行的测试中观察到的消除重复性能等来执行。确定用于以利用基于云或其他对象存储的对象大小相关点的方式来存储文件系统数据的对象或“团点”大小(1104)。例如,可以生成按对象大小的对象存储性能和/或成本(例如,延迟、开销)的性能图表或其他表示,并将其用于选择达到该对象存储的期望性能水平的对象(“团点”)大小。该分布式文件系统配置成将文件分割成针对文件系统操作(例如消除重复)的目的而确定的块大小的块,以及将多个块组合成针对在基于云的对象存储中存储而确定的对象大小(I 106)的较大对象(“团点”)。
[0045]在一些实施例中,可被组合以形成要存储在基于云的对象存储中的较大对象(“团点”)的块的数量可以是可变的。例如,块的数量可以基于文件的对象或正在存储的文件集的大小而改变。在一些实施例中,文件系统客户端可以配置成确定要组合以形成较大对象以存储在基于云的对象存储中的块的数量。在一些实施例中,有关要组合的块的数量和/或哪些块要包含在哪个对象(“团点”)中的的确定可以在文件系统服务器(如图1和/或图6的文件系统元数据服务器104)处执行。在一些实施例中,文件系统客户端可以配置成从服务器接收有关哪些块要组合在哪个对象中的指示,并基于此类指令来创建和存储对象。
[0046]在一些实施例中,可以将与两个或更多个文件关联的块包含在要存储在基于云的对象存储中的同一个对象中。在一些实施例中,可以将与两个或更多个不同文件系统客户端关联的文件所关联的块包含在为存储在基于云的对象存储中的对象中。例如,在一些实施例中,取消重复可以跨文件系统客户端执行,这在某种情况中可以促使包含存储的对象(“团点”)的一个或多个块由与不同文件系统客户端关联的文件来引用。
[0047]图12是图示用于在分布式文件系统的实施例中存储文件数据的元数据表示例的框图。在多种实施例中,可以由文件系统元数据服务器(如图1和/或图6的文件系统元数据服务器104)创建并维护元数据表,如图12的表1202和1210。在所示的示例中,块元数据表1202包含其中存储单调递增的块标识符的块标识符列1203;其中存储为每个块基于块的全部或部分数据计算的对应散列的块散列列1204。对于每个块,标识包含块数据的较大存储的对象(“团点”)的“团点id”被列示在“团点id”列1206中。每个块在包含它的对应存储的对象(“团点”)内的位置被列示在“偏移量”列1208中。对于给定的块,则可以使用表1202来查找其内包含块的数据且存储在例如基于云的对象存储中的存储的对象,以及指示该块的数据位于该对象的数据内哪里的该对象内的偏移量。
[0048]正如表1202的第一、第二和第四行中的团点id值“I”与团点元数据表1210中的系统团点id“l”所关联的项(行)之间的箭头所指示的,可以使用对应于给定块散列值的块元数据散列表1202中存储的团点i d以在团点元数据表1210中查找包含团点元数据的对应项(参见团点id列1212),这些团点元数据诸如:用于将包含团点的数据加密的加密密钥或其他保密数据(团点加密密钥列(1214 )、在基于云的对象存储中存储团点所在的位置(URI列1216)以及与当前活动和/或以其他方式附带被保留的文件系统对象关联的块的数量指示(块引用计数列1218)。对于较后一列,例如,在团点id = I的项(行)中,块引用计数列1218中的对应值指示当前活动(或例如由于与保持被存储的快照关联而以其他方式附带被保留)的3个块。在多种实施例中,正如下文与图15结合更全面描述的,可以使用块引用计数列来确定何时包含多个块的团点可以从存储该团点所在的基于云的对象存储中删除。
[0049]在多种实施例中,本文公开的文件系统数据的验证由文件系统,例如由文件系统元数据服务器,如图1和/或图6的文件系统元数据服务器104来执行。在多种实施例中,验证使得确保文件系统对象的无冲突消除重复存储能够在客户端之间提供,即使存在错配置和/或功能失效(例如,“漏洞多”的)或恶意客户端的情况中。
[0050]在一些实施例中,从基于云的对象存储中检索包含文件数据的多个块的存储的对象(“团点”)。检索的对象可以本地存储,例如存储在缓存中,并且用于验证包含该对象的组成块。可以使用多种技术来确定给定对象(“团点”)的缓存的副本应该在缓存中保留多久以有利于验证。
[0051]图13是图示用于验证分布式文件系统数据为存储在基于云的对象存储中的过程实施例的流程图。在多种实施例中,图13的过程可以由分布式文件系统元数据服务器(如图1和/或图6的文件系统元数据服务器104)使用来验证存储的文件系统数据。在所示的示例中,处理开始于或进行到要验证下一个块(1302)。例如,文件系统元数据服务器验证过程或模块可以从验证队列抽取下一个块验证任务。例如,当文件系统客户端将块报告为以存储在基于云的对象存储中时,所以可以将对应的验证任务添加到验证队列。在一些实施例中,验证队列可以包括其中可存储标识待验证的块的数据的数据库表或其他数据结构。进一步参考图13,例如,通过在块散列表(如图12的表1202)中执行查询来确定(1304)与包含该块的数据所在的存储的对象所关联的“团点”或其他存储的对象标识符。如果本地缓存(例如,图2的缓存210)中尚没有该团点(1306),则例如使用来自团点元数据表(如图12的表1210)且存储在缓存中的数据,从基于云的对象存储中检索该团点(1308)。如果本地缓存中已经有该团点(1306)或如果没有而一旦获得该团点并将其存储在缓存中(1308),则使用该团点的缓存副本来获取与该块对应的数据,例如使用如块散列表中的对应项所指示的该块在团点内的偏移量来获取与该块对应的数据,并且使用块数据来验证该块(1310)。例如,可以将如团点中存储的块数据的散列与如块元数据中存储的该块的散列进行比较。只要有块要验证,则图13的过程通过连续迭代重复执行(1312)。
[0052]在多种实施例中,可以使用多种技术来确定为执行如图13中所示的验证处理要一直将已检索的团点缓存多久。
[0053]图14是图示与验证分布式文件系统数据为存储在基于云的对象存储中结合来管理已缓存的文件数据的过程实施例的流程图。在多种实施例中,图14的过程可以由分布式文件系统元数据服务器(如图1和/或图6的文件系统元数据服务器104)使用来确定要将已从基于云的对象存储中读取的文件系统数据缓存多久。在所示的示例中,对于缓存的每个团点,维护与仍需验证的团点关联的块的计数(1402)。例如,当检索团点来执行验证时,如图13的步骤1308中那样,在一些实施例中,可以使用验证队列以及将块映射到团点id的块散列表来确定多少个包含该团点的块位于验证队列中。在一些实施例中,每次块被验证,则关联缓存的团点的“仍待验证的块”计数递减。如果该计数递减到等于“O” (1404),指示在一些实施例中再没有包含该团点的块仍待验证,则将该团点标记为“同意”以便从缓存中移除(1406)。否则,该团点继续存储在缓存中(1408),例如,以确保从缓存中可获取该块数据来验证包含仍需验证的团点的一个或多个块。在一些实施例中,其他缓存策略可以使团点在“仍待验证的块”计数已经递减到O之后保留一段时间,以及在一些实施例中,可以基于计数递减为O以外的策略来从缓存中移除团点。例如,在多种实施例中,时间、空间可用性和其他考量可以促使团点从缓存中被移除,而不管有一个或多个包含该团点的块仍待验证。
[0054]在多种实施例中,组合多个块以形成较大对象(“团点”)以便存储在基于云的对象存储中,这促使需要能够确定不再需要包含团点的块,以使存储该团点所在的存储位置能够通过例如“垃圾回收”的过程被再次使用。在一些实施例中,对于每个块存储引用计数,以便确定块何时不再被引用,以及对于每个团点,保存单独的团点级引用计数,以便获知包含该团点的最后一个块何时变为被删除。
[0055]图15是图示用于确定与多个文件数据块关联的已存储对象能够被删除的过程实施例的流程图。在多种实施例中,图15的过程可以由分布式文件系统元数据服务器(如图1和/或图6的文件系统元数据服务器104)使用来确定如存储在基于云的对象存储上的文件系统数据可以被删除。在所示的示例中,接收指示,其指示块不再需要且可以被删除(1502)。例如,在多种实施例中,块的引用计数可能已经递减到0,且可能已经确定没有仍保留的快照包括该块。确定存储该块所在的团点,并将关联的团点引用计数(例如,图12的表1210的列1218 )递减(1504)。如果一旦递减的团点引用计数等于O (1506 ),则标记该团点标以便删除(例如,使之进行垃圾回收)(1508)。如果递减的团点引用计数仍大于0(1506),则图15的过程结束而不标记该团点以便删除。
[0056]在多种实施例中,本文公开的技术可使文件系统操作,如消除重复,能够使用第一大小/粒度,即,本文描述的“±夬”大小来执行,同时能够使用存储的对象大小(“团点”大小)(其利用典型的基于云的对象存储的特点)来存储文件系统数据。
[0057]虽然前文实施例是出于理解简明的目的进行某种细节描述,但是本发明不限于所提供的细节。有许多备选方式来实现本发明。所公开的实施例是说明性的而非限制性的。
【主权项】
1.一种存储文件系统数据的方法,其包括: 接收要存储包含多个文件数据块的文件的请求; 确定要存储所述多个块的至少子集;以及 至少部分地通过提供指示来对所述请求予以响应,所述指示用于将包含所述文件的所述多个块中至少子集的两个或更多个块作为包含所述两个或更多个块的组合块数据的单个存储的对象来存储。2.如权利要求1所述的方法,其中从文件系统客户端接收所述请求。3.如权利要求1所述的方法,其中所述请求包括包含所述文件的块的散列或其他表示。4.如权利要求3所述的方法,其中使用所述散列或其他表示来确定包含所述文件的块是否已被所述文件系统存储。5.如权利要求4所述的方法,其中要存储所述多个块的至少子集的确定包括,使用包含所述多个块的所述至少子集的块的相应散列或其他表示来确定所述块尚未被所述文件系统存储。6.如权利要求1所述的方法,其中用于包含所述文件的所述多个块的所述至少子集的两个或更多个块作为单个存储的对象来存储的所述指示包括,与所述单个存储的对象关联的定位符或其他标识符以及将包含所述文件的所述多个块的所述至少子集与所述定位符或其他标识符关联的数据。7.如权利要求6所述的方法,其中所述定位符或其他标识符指示应将所述单个存储的对象发送到以便存储所在的位置。8.如权利要求1所述的方法,其中所述请求由文件系统客户端发送,所述文件系统客户端配置成通过使用所述两个或更多个块组装所述单个存储的对象来对所述请求的所述响应予以响应。9.如权利要求1所述的方法,还包括存储将所述两个或更多个块与所述单个存储的对象关联的元数据。10.如权利要求9所述的方法,其中所述元数据包括对应于每个块的,将包含含有所述单个存储的对象的块的数据的位置。11.如权利要求1所述的方法,还包括至少部分地通过检索所述单个存储的对象并使用包含所述单个存储的对象的相应块的块数据来验证如存储的块数据对应于预期要存储的块数据,以验证所述两个或更多个块的存储。12.如权利要求11所述的方法,还包括使用“仍待验证的块”计数器来确定要在本地缓存中将所述单个存储的对象的副本保留多久。13.如权利要求1所述的方法,还包括对于所述单个存储的对象,存储反映包含仍被所述文件系统保留的团点的块的数量的引用计数。14.如权利要求1所述的方法,还包括至少部分地基于确定包含所述团点的块不再被所述文件系统保留,将所述引用计数递减。15.一种存储文件系统数据的系统,其包括: 通信接口;以及 处理器,所述处理器耦合到所述通信接口且配置成: 通过所述通信接口接收要存储包含多个文件数据块的文件的请求; 确定要存储所述多个块的至少子集;以及 至少部分地通过提供指示来对所述请求予以响应,所述指示是要将包含所述文件的所述多个块中至少子集的两个或更多个块作为包含所述两个或更多个块的组合块数据的单个存储的对象来存储。16.如权利要求15所述的系统,其中所述请求包括包含所述文件的块的散列或其他表不O17.如权利要求16所述的系统,其中使用所述散列或其他表示来确定所述文件系统是否已存储包含所述文件的块。18.如权利要求17所述的系统,其中要存储所述多个块的至少子集的确定包括,使用包含所述多个块的所述至少子集的块的相应散列或其他表示来确定所述块尚未被所述文件系统存储。19.如权利要求15所述的系统,其中所述处理器还配置成至少部分地通过检索所述单个存储的对象并使用包含所述单个存储的对象的相应块的块数据来验证如存储的所述块数据对应于预期要存储的块数据,以验证所述两个或更多个块的存储。20.—种用于存储文件系统数据的计算机程序产品,所述计算机程序产品包含在非瞬态计算机可读存储介质中且包含用于执行如下步骤的计算机指令: 接收要存储包含多个文件数据块的文件的请求; 确定要存储所述多个块的至少子集;以及 至少部分地通过提供指示来对所述请求响应,所述指示是要将包含所述文件的所述多个块中至少子集的两个或更多个块作为包含所述两个或更多个块的组合块数据的单个存储的对象来存储。
【文档编号】G06F17/30GK106021256SQ201511000869
【公开日】2016年10月12日
【申请日】2015年12月28日
【发明人】T.曼维尔, J.罗佩斯, R.德赛, N.罗森布卢姆
【申请人】Emc 公司