大目录的有效分配的制作方法

文档序号:14033807阅读:180来源:国知局
大目录的有效分配的制作方法



背景技术:

固态存储器(诸如闪存)目前在固态驱动器(ssd)中被用来增强或代替常规硬盘驱动器(hdd)、可写cd(光盘)或可写dvd(数字多功能盘)驱动器(统称为旋转介质)和磁带驱动器以便存储大量数据。闪存和其它固态存储器具有不同于旋转介质的特性。然而,出于兼容性原因,许多固态驱动器被设计成符合硬盘驱动器标准,这使得难以提供增强的特征或利用闪存和其它固态存储器的独特方面。

实施例出现在这种情况下。



技术实现要素:

在一些实施例中,提供了一种用于在存储系统中分配目录的方法。该方法包括接收对属于目录的文件的存储系统中的位置信息的请求,并且通过在存储系统的不同存储节点之间定位权限来确定文件的所有权。

在一些实施例中,提供了一种用于在存储系统中分配目录的方法。该方法包括将与多个所有者相关联的信息写入到存储系统的多个存储节点中,该信息关于多个文件的位置,其中该多个存储节点中的每一个具有该多个所有者中的一个或多个,并且其中该多个所有者中的每一个具有该多个文件的子集的所有权。该方法包括接收访问该多个文件中的文件的请求,该请求指定该文件的文件名以及具有该文件的目录的标识;并且基于该文件名和该标识来确定该多个所有者中的哪一个所有者在该多个存储节点中的哪个存储节点中具有该文件的所有权并且具有关于该文件的位置的信息。该目录的该多个文件的不同子集的所有权被分配在不同存储节点中的不同所有者之间。

在一些实施例中,提供了一种具有目录的有效分配的存储系统。该系统包括耦合作为存储集群的多个存储节点。该多个存储节点中的每一个被配置为具有至少一个所有者,每个所有者具有该存储集群的文件的子集的所有权,每个所有者被配置为存储关于该文件子集中的每一个的存储集群中的位置的信息,其中目录的该多个文件的不同子集的所有权在不同存储节点中的不同所有者之间分配。该多个存储节点中的每一个被配置为基于该目录内的文件的标识和文件名来确定哪个所有者在该多个存储节点中的哪个存储节点中具有关于该文件的该存储集群中的该位置的信息。

从以下结合附图的详细描述中,实施例的其它方面和优点将变得显而易见,这些附图以举例的方式示出了所描述的实施例的原理。

附图说明

通过参考以下结合附图的描述,可以最好地理解所描述的实施例及其优点。在不脱离所描述的实施例的精神和范围的情况下,这些附图决不限制本领域技术人员可以对所描述的实施例进行形式和细节上的任何改变。

图1是根据一些实施例的具有多个存储节点以及内部存储设备的存储集群的透视图,内部存储设备耦合到每个存储节点以便提供网络附接存储设备。

图2是根据一些实施例的示出耦合多个存储节点的互连结构交换机的框图。

图3是根据一些实施例的示出存储节点的内容和非易失性固态存储单元中的一个的内容的多级框图。

图4是根据一些实施例的描绘了客户端对存储集群进行远程过程调用以便获得关于存储集群中的文件的位置的信息的作用图。

图5是根据一些实施例的用于目录和文件的路径的映射图,示出了索引节点号以及标识权限来获得关于文件的位置的信息的散列计算。

图6示出了根据一些实施例的存储集群的存储节点中的权限的内容的实施例。

图7示出了根据一些实施例的使用应用图5的散列计算来指向下一个权限的迭代过程来打开具有指定路径名的文件的应用的实例。

图8是用于在存储系统中分配目录的方法的流程图,该方法可以通过图1-7的存储集群、存储节点和存储单元的实施例来实践。

图9是示出了可以实现在此描述的实施例的示例性计算设备的图示。

具体实施方式

带有具有存储存储器的存储节点和存储单元的存储集群在本文中被描述为具有将关于在目录下的文件的物理位置的信息分配到多个存储节点而不是将所有这些信息集中在单个存储节点中的机制。将信息分配到多个存储节点导致大目录(即具有大量文件的目录)的有效分配。在各种实施例中,存储节点使用父目录名和文件名的索引节点号的散列计算来经由查找表指向关于具有文件名的文件和具有父目录名的父目录的物理位置的信息。由于散列计算和查找表的性能均不限于仅属于一个存储节点,所以存储系统避免了瓶颈状况。参考图1-4来描述存储集群、存储节点和存储单元的实施例。参考图5-8来描述在存储节点的实施例中用于获得关于文件的物理位置的信息的过程和机制。

以下实施例描述了存储用户数据的存储集群,诸如源自一个或多个用户或客户端系统或存储集群外部的其它来源的用户数据。存储集群使用擦除编码和元数据的冗余副本来将用户数据分配在容纳在机箱内的所有存储节点上。擦除编码是指一种数据保护或重建的方法,其中数据被存储在一组不同的位置上,诸如磁盘、存储节点或地理位置。闪速存储器是可以与实施例集成的一种类型的固态存储器,但是实施例可以扩展到其它类型的固态存储器或其它存储介质,包括非固态存储器。存储位置和工作负载的控制被分配在集群对等系统中的存储位置上。诸如转递各个存储节点之间的通信、检测存储节点何时变得不可用、以及平衡各个存储节点上的i/o(输入和输出)等的任务都是在分配的基础上来处理的。在一些实施例中,数据被布局或分配在支持数据恢复的数据片段或数据带中的多个存储节点上。数据的所有权可以独立于输入和输出模式在集群内重新分配。以下更详细描述的这种架构允许集群中的存储节点在系统保持运行的情况下发生故障,因为数据可以从其它存储节点重建并且因此保持可用于输入和输出操作。在各种实施例中,存储节点可以称为集群节点、刀锋或服务器。

存储集群包含在机箱(即容纳一个或多个存储节点的壳体)内。用于向每个存储节点提供电力的机构(诸如配电总线)以及诸如使得能够在存储节点之间进行通信的通信总线的通信机构包括在机箱内。根据一些实施例,存储集群可以在一个位置中作为独立系统运行。在一个实施例中,机箱包含能够独立地启用或禁用的配电和通信总线两者的至少两个实例。内部通信总线可以是以太网总线,然而,诸如外围设备互连结构(pci)express、infiniband等其它技术同样适用。机箱为外部通信总线提供了端口,以便能够在多个机箱之间直接或通过交换机与客户端系统进行通信。外部通信可以使用诸如以太网、infiniband、光纤通道等的技术。在一些实施例中,外部通信总线使用不同的通信总线技术来进行机箱间和客户端通信。如果交换机部署在机箱内或机箱之间,那么交换机可以充当多种协议或技术之间的转换。当连接多个机箱来定义存储集群时,该存储集群可以由客户端使用专有接口或标准接口(诸如网络文件系统(nfs)、公用互联网文件系统(cifs)、小型计算机系统接口(scsi)或超文本传输协议(http))来访问。从客户端协议的转换可以在交换机、机箱外部通信总线处或每个存储节点内发生。

每个存储节点可以是一个或多个存储服务器,并且每个存储服务器被连接到一个或多个非易失性固态存储器单元,其可以称为存储单元。一个实施例包括在每个存储节点中并且在一至八个非易失性固态存储器单元之间的单个存储服务器,然而,这一个实例并不意味着限制。存储服务器可以包括处理器、动态随机存取存储器(dram)和用于内部通信总线的接口以及用于每个电力总线的配电。在一些实施例中,在存储节点内部,接口和存储单元共用通信总线,例如pciexpress。非易失性固态存储单元可以通过存储节点通信总线直接访问内部通信总线接口或者请求存储节点来访问总线接口。在一些实施例中,非易失性固态存储单元包含嵌入式中央处理单元(cpu)、固态存储控制器和一定量的固态大容量(例如在2-32千兆字节(tb)之间)存储设备。诸如dram等的嵌入式易失性存储介质和能量储备装置包括在非易失性固态存储器单元中。在一些实施例中,能量储备装置是能够在电力损失的情况下将dram内容的子集传送到稳定的存储介质的电容器、超级电容器或电池。在一些实施例中,非易失性固态存储器单元被构建为具有存储类存储器,诸如相变或磁阻随机存取存储器(mram),其替代dram并且启用降低功率保持装置。

存储节点和非易失性固态存储设备的许多特征之一是能够主动重建存储集群中的数据。存储节点和非易失性固态存储设备能够确定存储集群中的存储节点或非易失性固态存储设备何时无法到达,而不管是否试图读取涉及该存储节点或非易失性固态存储设备的数据。存储节点和非易失性固态存储设备随后合作以便在至少部分新的位置中恢复和重建数据。这构成主动重建,因为系统重建数据而无需等待直到从使用存储集群的客户端系统发起的读访问需要数据为止。存储存储器的这些和另外的细节及其操作在下面讨论。

图1是根据一些实施例的具有多个存储节点150以及内部固态存储器的存储集群160的透视图,内部固态存储器耦合到每个存储节点以便提供网络附接存储设备或存储区域网络。网络附接存储设备、存储区域网络或存储集群或其它存储存储器可以包括一个或多个存储集群160,每个存储集群具有以物理部件和由此提供的存储存储器的数量的灵活且可重新配置的安排的一个或多个存储节点150。存储集群160被设计成安装在机架中,并且一个或多个机架可以根据存储存储器的需要来建立和填充。存储集群160具有机箱138,该机箱具有多个槽142。应当理解,机箱138可以称为外壳、壳体或机架单元。在一个实施例中,机箱138具有十四个槽142,但是容易设计其它数量的槽。例如,一些实施例具有四个槽、八个槽,十六个槽,三十二个槽或其它合适数量的槽。在一些实施例中,每个槽142可以容纳一个存储节点150。机箱138包括可以用于将机箱138安装在机架上的翼片148。风扇144提供用于冷却存储节点150及其部件的空气循环,但是可以使用其它冷却部件,或者可以设计不具有冷却部件的实施例。交换机结构146将机箱138内的存储节点150耦接在一起并耦接到网络以便与存储器通信。在图1描绘的实施例中,交换机结构146和风扇144左侧的槽142被示出由存储节点150占据,而交换机结构146和风扇144右侧的槽142是空的并且可用于为了说明的目的而插入存储节点150。这种配置是一个实例,并且一个或多个存储节点150可以以各种另外的布置来占据槽142。在一些实施例中,存储节点安排不必是顺序的或相邻的。存储节点150是可热插的,这意味着存储节点150可以插入到机箱138中的槽142中或者从槽142中移除,而无需停止系统或使系统断电。在将存储节点150插入槽142或者从槽142移除存储节点150时,系统自动重新配置以便识别和适应改变。在一些实施例中,重新配置包括恢复冗余和/或重新平衡数据或负载。

每个存储节点150可以具有多个部件。在这里示出的实施例中,存储节点150包括由cpu156(即,处理器)、耦合到cpu156的存储器154以及耦合到cpu156的非易失性固态存储设备152填充的印刷电路板158,尽管在另外的实施例中可以使用其它安装件和/或部件。存储器154具有由cpu156执行的指令和/或由cpu156操作的数据。如以下进一步解释的,非易失性固态存储设备152包括闪存,或者在另外的实施例中包括其它类型的固态存储器。

参考图1,存储集群160是可缩放的,这意味着如上所述容易添加具有不均匀存储大小的存储容量。在一些实施例中,一个或多个存储节点150可以插入每个机箱中或者从每个机箱移除,并且存储集群自行配置。插件存储节点150不管是在交付时安装在机箱中还是随后添加都可以具有不同的大小。例如,在一个实施例中,存储节点150可以具有4tb的任何倍数,例如8tb、12tb、16tb、32tb等。在另外的实施例中,存储节点150可以具有任何倍数的其它存储量或容量。每个存储节点150的存储容量被广播,并且影响如何条带化数据的决定。为了最大的存储效率,实施例可以在条带中尽可能宽地自行配置、经受连续操作的预定要求,其中在机箱内丢失多达一个或多达两个的非易失性固态存储单元152或存储节点150。

图2是示出了耦合多个存储节点150的通信互连结构170和配电总线172的框图。返回参考图1,在一些实施例中,通信互连结构170可以被包括在交换机结构146中或者与交换机结构一起实现。在多个存储集群160占据机架的情况下,在一些实施例中,通信互连结构170可以被包括在机箱交换机的顶部中或者与其一起实现。如图2所示,存储集群160被封闭在单个机箱138内。外部端口176通过通信互连结构170耦合到存储节点150,而外部端口174直接耦合到存储节点。外部电力端口178耦合到配电总线172。存储节点150可以包括如参考图1所描述的非易失性固态存储设备152的变化数量和不同容量。此外,如图2所示,一个或多个存储节点150可以是仅计算存储节点。权限168在非易失性固态存储设备152上实现为例如存储在存储器中的列表或其它数据结构。在一些实施例中,权限被存储在非易失性固态存储设备152内并且由在非易失性固态存储设备152的控制器或其它处理器上执行的软件来支持。在另一个实施例中,权限168在存储节点150上实现为例如存储在存储器154中并且由在存储节点150的cpu156上执行的软件支持的列表或其它数据结构。在一些实施例中,权限168控制数据如何存储在非易失性固态存储设备152中以及存储在何处。这种控制有助于确定对数据应用哪种类型的擦除编码方案,以及哪些存储节点150具有哪些数据部分。每个权限168可以被分配给非易失性固态存储设备152。在各种实施例中,每个权限可以控制通过文件系统、通过存储节点150或者通过非易失性固态存储设备152分配给数据的一系列索引节点号、片段号或其它数据标识符。

在一些实施例中,每条数据和每条元数据在系统中具有冗余。此外,每条数据和每条元数据都具有所有者,该所有者可以称为权限。如果该权限(例如,由于存储节点的故障)无法到达,那么对于如何找到该数据或元数据存在继任计划。在各种实施例中,存在权限168的冗余副本。在一些实施例中,权限168与存储节点150和非易失性固态存储设备152具有关系。覆盖数据片段号或数据的其它标识符的范围的每个权限168可以被分配给特定的非易失性固态存储设备152。在一些实施例中,用于所有这类范围的权限168被分配在存储集群的非易失性固态存储设备152上。每个存储节点150具有网络端口,该网络端口提供对该存储节点150的非易失性固态存储设备152的访问。在一些实施例中,数据可以被存储在与片段号相关联的片段中,并且该片段号是用于配置raid(独立磁盘的冗余阵列)条带的间接寻址。权限168的分配和使用因此建立了对数据的间接寻址。根据一些实施例,间接寻址可以称为间接引用数据的能力,在这种情况下是经由权限168来完成。片段将一组非易失性固态存储设备152和本地标识符标识到可以包含数据的非易失性固态存储设备152的集合中。在一些实施例中,本地标识符是到设备中的偏移量,并且可以由多个片段顺序地重新使用。在其它实施例中,本地标识符对于特定片段是唯一的并且从不重新使用。非易失性固态存储设备152中的偏移量被应用来定位数据以便写入非易失性固态存储设备152(呈raid条带的形式)或者从该非易失性固态存储设备读取。数据在非易失性固态存储设备152的多个单元上被条带化,该非易失性固态存储设备可以包括或不同于具有用于特定数据片段的权限168的非易失性固态存储设备152。

如果例如在数据移动或数据重建过程中在数据位于的特定片段的位置中存在变化,那么应当在具有该权限168的该非易失性固态存储设备152或存储节点150处咨询该数据片段的权限168。为了定位特定的数据片,各实施例计算数据片段的散列值或者应用索引节点号或数据片段号。这个操作的输出指向具有用于该特定数据片的权限168的非易失性固态存储设备152。在一些实施例中,这个操作存在两个阶段。第一阶段将实体标识符(id)(例如,片段号、索引节点号或目录号)映射到权限标识符。这个映射可以包括诸如散列或位掩码的计算。第二阶段是将权限标识符映射到特定的非易失性固态存储设备152,这可以通过显式映射完成。该操作是可重复的,从而使得当执行计算时,该计算的结果可重复且可靠地指向具有该权限168的特定非易失性固态存储设备152。该操作可以包括该组可到达的存储节点作为输入端。如果该组可到达的非易失性固态存储单元改变,那么最佳设置改变。在一些实施例中,持久值是当前分配(其始终为真),并且计算值是集群将尝试重新配置的目标分配。这个计算可以被用于在存在一组非易失性固态存储设备152的情况下为权限确定最佳的非易失性固态存储设备152,该非易失性固态存储设备是可到达的并且构成相同的集群。该计算还确定有序的一组对等非易失性固态存储设备152,其还将记录对非易失性固态存储映射的权限,从而使得即使所分配的非易失性固态存储设备不可到达也可以确定权限。在一些实施例中,如果特定权限168不可用,那么可以咨询复制或替代的权限168。

参考图1和2,存储节点150上的cpu156的许多任务中的两个任务将分解写入数据,并且重新组装读取数据。当系统确定将要写入该数据时,该数据的权限168如上所述地定位。当用于数据的片段id已经被确定时,写入的请求被转发到当前被确定为从该片段确定的权限168的主机的非易失性固态存储设备152。存储节点150的主机cpu156(非易失性固态存储设备152和对应的权限168驻留在其上)随后分解或碎片化数据并将数据发送到各种非易失性固态存储设备152。根据擦除编码方案来将发送的数据写成数据条带。在一些实施例中,数据被请求拉出,并且在其它实施例中,数据被推送。相反,当读取数据时,如上所述地定位包含数据的片段id的权限168。存储节点150的主机cpu156(非易失性固态存储设备152和对应的权限168驻留在其上)从非易失性固态存储设备和通过权限指向的对应的存储节点来请求数据。在一些实施例中,数据被从闪速存储设备读取为数据条带。存储节点150的主机cpu156随后重新组装所读取的数据、根据适当的擦除编码方案来纠正任何错误(如果存在)、并且将重新组装的数据转发给网络。在另外的实施例中,可以在非易失性固态存储设备152中处理这些任务中的一些或全部。在一些实施例中,片段主机通过请求来自存储设备的页面请求将数据发送到存储节点150,并且随后将数据发送到做出原始请求的存储节点。

在一些系统中,例如在unix类型的文件系统中,数据是用索引节点处理的,该索引节点指定表示文件系统中对象的数据结构。例如,对象可以是文件或目录。元数据可以伴随对象作为诸如权限数据和创建时间戳等属性的属性。片段号可以分配给文件系统中的这种对象的全部或一部分。在其它系统中,数据片段是用别处分配的片段号来处理的。为了讨论的目的,分配的单位是实体,并且实体可以是文件、目录或片段。也就是说,实体是由存储系统存储的数据或元数据的单元。实体被分组成称为权限的集合。每个权限都具有权限所有者,该权限所有者是具有用于更新权限中的实体的专有权的存储节点。换言之,存储节点包含权限,并且权限进而包含实体。

根据一些实施例,片段是数据的逻辑容器。片段是介质地址空间与物理闪存位置之间的地址空间,即数据片段号在这个地址空间中。片段也可以包含元数据,这使得能够恢复数据冗余(重写到不同的闪存位置或设备),而不需要涉及更高级别的软件。在一个实施例中,片段的内部格式包含客户端数据和介质映射以便确定该数据的位置。在适用的情况下,通过将片段分割成多个数据和奇偶校验碎片,每个数据片段都受到保护以免受例如存储器和其它故障。数据和奇偶校验碎片被根据擦除编码方案来在耦合到主机cpu156(参见图5)的非易失性固态存储设备152上分配(即条带化)。在一些实施例中,术语片段的使用是指容器及其在片段的地址空间中的位置。根据一些实施例,术语条带的使用是指与片段相同的一组碎片,并且包括碎片如何与冗余或奇偶校验信息一起分配。

在整个存储系统上进行一系列地址空间转换。顶部处是链接到索引节点的目录条目(文件名)。索引节点指向介质地址空间中,数据被逻辑存储在该地址空间中。介质地址可以通过一系列间接介质进行映射,以便分散开大文件的负载,或者实现如删除重复或快照的数据服务。介质地址可以通过一系列间接介质进行映射,以便分散开大文件的负载,或者实现如删除重复或快照的数据服务。片段地址随后被转换成物理闪存位置。根据一些实施例,物理闪存位置具有由系统中的闪存数量界定的地址范围。介质地址和片段地址是逻辑容器,并且在一些实施例中使用128位或更大的标识符以便实际上是无限的,其中重复使用的可能性被计算为比系统的预期寿命更长。在一些实施例中,来自逻辑容器的地址以分层方式来分配。最初,可以为每个非易失性固态存储设备152分配一定范围的地址空间。在这个指定范围内,非易失性固态存储设备152能够分配地址而不与其它非易失性固态存储设备152同步。

数据和元数据由一组基础存储布局存储,这些存储布局针对不同的工作负载模式和存储设备进行优化。这些布局包含多种冗余方案、压缩格式和索引算法。这些布局中的一些存储关于权限和权限主人的信息,而其它布局存储文件元数据和文件数据。冗余方案包括容许单个存储设备(诸如nand闪存芯片)内的容许损坏位的错误校正码、容许多个存储节点的故障的擦除代码以及容许数据中心或区域故障的复制方案。在一些实施例中,在单个存储单元内使用低密度奇偶校验检查(ldpc)码。在一些实施例中,在存储集群内使用里德所罗门编码,并且在存储网格内使用镜像。元数据可以使用有序的日志结构化索引(诸如日志结构化合并树)来存储,并且大数据可以不被存储在日志结构化布局中。

为了维持实体的多个副本之间的一致性,存储节点通过计算隐含地同意两件事情:(1)包含实体的权限,以及(2)包含权限的存储节点。实体向权限的分配可以通过将实体伪随机地分配给权限、通过将实体划分为基于外部产生的密钥的范围、或者通过将单个实体放置到每个权限中来完成。伪随机方案的实例是线性散列和可扩展散列下的复制(rush)散列族,包括可扩展散列下的受控复制(crush)。在一些实施例中,伪随机分配仅用于将权限分配给节点,因为该组节点可以改变。该组权限无法改变,因此在这些实施例中可以应用任何主观功能。一些放置方案自动将权限放置在存储节点上,而其它放置方案依赖于权限到存储节点的明确映射。在一些实施例中,利用伪随机方案将每个权限映射到一组候选权限所有者。与crush相关的伪随机数据分配功能可以将权限分配给存储节点,并且创建分配权限的列表。每个存储节点具有伪随机数据分配功能的副本,并且可以达到相同的分配计算,并且稍后查找或定位权限。在一些实施例中,伪随机方案中的每一个都需要可到达的一组存储节点作为输入,以便推断相同的目标节点。一旦实体已放置在权限中,该实体就可以被存储在物理设备上,从而使得预期故障将不会导致意外的数据丢失。在一些实施例中,重新平衡算法试图以相同布局并在同一组机器上将所有实体的副本存储在权限内。

预期故障的实例包括设备故障、机器被盗、数据中心火灾和地区性灾难,诸如核事件或地质事件。不同的故障会导致不同程度的可接受的数据丢失。在一些实施例中,被盗的存储节点既不影响系统的安全性也不影响系统的可靠性,而取决于系统配置,区域性事件可以不导致数据丢失、丢失更新几秒钟或几分钟、或者甚至完全丢失数据。

在实施例中,用于存储冗余的数据的放置独立于用于数据一致性的权限的放置。在一些实施例中,包含权限的存储节点不包含任何持久存储设备。相反,存储节点被连接到不包含权限的非易失性固态存储单元。存储节点与非易失性固态存储单元之间的通信互连结构由多种通信技术组成,并且具有不一致的性能和容错特性。在一些实施例中,如上所述,非易失性固态存储单元经由pciexpress连接到存储节点,存储节点被使用以太网背板在单个机箱内连接在一起,并且机箱被连接在一起以便形成存储集群。在一些实施例中,存储集群被使用以太网或光纤信道连接到客户端。如果将多个存储集群配置到存储网格中,那么该多个存储集群被使用互联网或其它长途网络链接来连接,诸如不遍历互联网的“城域规模”链路或专用链路。

权限所有者具有修改实体的专有权以便将实体从一个非易失性固态存储单元迁移到另一个非易失性固态存储单元,并且添加和移除实体副本。这允许维护基础数据的冗余。当权限所有者故障、将要拆毁或过载时,权限被转移到新的存储节点。瞬时故障使得确保所有没有故障的机器同意新的权限位置是有意义的。由于瞬态故障而产生的模糊性可以通过一致性协议(诸如paxos)、热温故障切换方案经由通过远程系统管理员进行手动干预或者通过本地硬件管理员(例如通过从集群中物理地移除故障机器或按下故障机器上的按钮)来自动实现。在一些实施例中,使用一致性协议,并且故障转移是自动的。根据一些实施例,如果在太短的时间段内出现太多故障或复制事件,那么系统进入自我保存模式并且停止复制和数据移动活动,直到管理员介入为止。

当权限在其权限中的存储节点与权限所有者更新实体之间转移时,系统在存储节点与非易失性固态存储单元之间传送消息。关于持久消息,具有不同目的的消息具有不同的类型。根据消息的类型,系统维持不同的顺序和耐久性保证。当持久消息正在被处理时,这些消息被以多种持久和非持久的存储硬件技术来临时存储。在一些实施例中,消息被存储在ram、nvram和nand闪存设备上,并且使用各种协议来有效使用每个存储介质。对延迟敏感的客户端请求可以保留在复制的nvram中,并且随后再保存到nand中,而后台重新平衡操作会直接保留到nand。

持久消息在被传送之前被持久地存储。这允许系统继续为客户端请求提供服务,而不管是否出现故障和部件更换。虽然许多硬件部件包含对系统管理员、制造商、硬件供应链和持续监控质量控制基础架构可见的唯一标识符,但是在基础架构地址顶部上运行的应用程序将虚拟化地址。无论是否发生部件故障和替换,这些虚拟化地址在存储系统的生命周期中都不会改变。这允许存储系统的每个部件随时间被替换,而无需重新配置或中断客户端请求处理。

在一些实施例中,虚拟化地址被存储为具有足够的冗余。连续监测系统将硬件和软件状态与硬件标识符相关联。这允许检测和预测由于故障部件和制造细节而产生的故障。在一些实施例中,监视系统还能够通过从关键路径移除部件而在发生故障之前使权限和实体能够远离受影响设备而主动转移。

图3是示出存储节点150的内容和存储节点150的非易失性固态存储设备152的内容的多级框图。在一些实施例中,通过网络接口控制器(nic)202将数据传送到存储节点150并且从该存储节点传送数据。如上所述,每个存储节点150具有cpu156以及一个或多个非易失性固态存储设备152。在图3中向下移动一级,每个非易失性固态存储设备152具有相对较快的非易失性固态存储器,诸如非易失性随机存取存储器(nvram)204和闪速存储器206。在一些实施例中,nvram204可以是不需要编程/擦除周期的部件(dram、mram、pcm),并且可以是能够支持比存储器从其读取更频繁地被写入的存储器。在图3中向下移动另一级,nvram204在一个实施例中被实现为高速易失性存储器,诸如由能量储备218支持的动态随机存取存储器(dram)216。能量储备218提供足够的电力来保持dram216充足供电,以便在电力故障的情况下将内容传送到闪速存储器206。在一些实施例中,能量储备218是供应足以使dram216的内容在功率损耗的情况下能够传送到稳定的储存介质的能量的适当供应的电容器、超级电容器、电池或其它设备。闪速存储器206被实现为多个闪存管芯222,其可以称为闪存管芯222的封装或者闪存管芯222的阵列。应当理解,闪存管芯222可以以任何数量的方式来封装,其中每个封装单个管芯、每个封装多个管芯(即,多芯片封装)、以混合封装、在印刷电路板或其它基板上封装为裸管芯、封装为封装管芯等等。在示出的实施例中,非易失性固态存储设备152具有控制器212或其它处理器以及耦合到控制器212的输入输出(i/o)端口210。i/o端口210被耦合到闪存存储节点150的cpu156和/或网络接口控制器202。闪存输入输出(i/o)端口220被耦合到闪存管芯222,并且直接存储器访问单元(dma)214被耦合到控制器212、dram216和闪存管芯222。在示出的实施例中,i/o端口210、控制器212、dma单元214和闪存i/o端口220在例如现场可编程门阵列(fpga)的可编程逻辑器件(pld)208上实现。在这个实施例中,每个闪存管芯222具有被组织为十六kb(千字节)页面224的页面以及数据可以通过其写入闪存管芯222或者从闪存管芯读取的寄存器226。在另外的实施例中,使用其它类型的固态存储器来代替或者除了闪存管芯222内示出的闪速存储器。

在如在此公开的各种实施例中,存储集群160通常可以与存储阵列进行对比。存储节点150是创建存储集群160的集合的一部分。每个存储节点150拥有提供数据所需的一片数据和计算。多个存储节点150合作来存储和检索数据。通常用于存储阵列的存储存储器或存储设备较少参与处理和操纵数据。存储阵列中的存储存储器或存储设备接收读取、写入或擦除数据的命令。存储阵列中的存储存储器或存储设备没有意识到它们嵌入其中的较大系统或者数据意味着什么。存储阵列中的存储存储器或存储设备可以包括各种类型的存储存储器,诸如ram、固态驱动器、硬盘驱动器等。本文描述的存储单元152具有同时有效并且用于多种目的的多个接口。在一些实施例中,存储节点150的一些功能被移位到存储单元152中,从而将存储单元152转换成存储单元152和存储节点150的组合。将(相对于存储数据)的计算放置到存储单元152中将该计算放置成更接近数据本身。各种系统实施例具有带有不同能力的存储节点层的分层结构。相比之下,在存储阵列中,控制器拥有并且了解关于控制器在机架或存储设备中管理的所有数据的全部内容。在存储集群160中,如本文所述,多个存储单元152和/或存储节点150中的多个控制器以各种方式协作(例如,用于擦除编码、数据碎片化、元数据通信和冗余、存储容量扩展或收缩、数据恢复等等)。

图4是描绘了客户端402对存储集群160进行远程过程调用404以便获得对存储集群160中的文件的句柄的作用图。在示出的实例中,远程过程调用404呈对文件句柄的请求的形式,并且该请求通过包含目录的标识(例如索引节点)和目录内的文件名来引用文件。存储集群160获得存储集群中的文件的句柄408,将此信息作为远程过程调用响应406返回给客户端402。如以上参考图2所述,权限168控制数据如何存储在存储单元152的存储存储器中以及存储在何处,并且可以以列表或其它数据结构的形式来实现。在以下描述的实施例中,权限168对索引节点具有所有权。具有索引节点号的索引节点对应于具有目录名的目录或者具有文件名的文件。

图5是目录和文件的路径图,示出了索引节点号512以及散列计算506,该散列计算基于目录句柄和目录内的文件名指向或标识从其获得文件句柄的权限168。在图5的顶部处,实例示出了具有目录名502的目录以及具有在具有目录名502的目录下的文件名504的文件。具有包含文件504(名为“实例_文件99.txt”)的目录的目录具有的索引节点号为512“17”。“11”是文件的索引节点号512。父目录的索引节点号512和文件名504标识权限168。在这个实例中,权限168被命名为“a3”。

在各种实施例中,父目录的索引节点号512和文件名504标识权限168的机制包括散列计算506。信息的这种连接在图5的中间被描述为“散列[目录索引节点号512,文件名504]–>权限168”。在一些实施例中,存储节点的计算部件对父目录的索引节点号512和文件名504执行散列计算506,并且应用散列计算506的结果来识别适合的权限,并且存储集群的消息系统使得能够与识别的权限进行通信以便访问所需文件。应当理解,这些实施例不需要集中的评估机制来确定文件的所有权。因此,这些实施例允许不需要将文件有效地定位为单个代理,并且因此避免了与使用单个代理的机制相关联的瓶颈。

图6示出了存储集群160的存储节点150中的权限168的内容602的实施例。存储节点150被耦合在一起以形成存储集群160,如以上参考图1-3所描述的。每个存储节点150具有一个或多个权限168,或者仅在一些实施例中可以计算一个或多个存储节点150。在一些实施例中,每个权限168可以被进一步分段。权限168的内容602包括许多索引节点,其中之一在图6中示出。对于示出的索引节点,权限168的内容602包括索引节点号和索引节点名称、具有索引节点号和索引节点名称的父索引节点、散列计算结果、目录序列、文件名504和文件句柄408。这种信息可以用列表、表格或其它数据结构的形式来表示。在变型中,与索引节点有关的其它形式的信息被存储在权限168下。

以下实例描述了对存储节点150中的权限168下的该信息的访问和使用。存储节点150(或者更具体地,存储节点150中的处理器或存储单元中的处理器)执行父目录的索引节点号512和文件名504的散列计算506,从而试图找到具有文件名504的文件句柄。存储节点150采用散列计算506的结果并且识别权限168。存储节点150随后通过存储集群的消息系统与具有感兴趣权限168的存储节点150进行通信,并且向该权限168请求该文件的文件句柄408。权限168(或者更具体地,具有该权限168的存储节点150中的处理器)查找文件句柄408。例如,权限168可以应用散列结果、文件名504、目录序列、索引节点号、文件名和/或父目录索引节点号来查找文件句柄408并且验证文件句柄408唯一对应于具有文件名504和目录序列即具有文件路径名称518(参见图5)的特定文件。在一些实施例中,具有带有文件句柄408的权限168的存储节点150将文件句柄408作为远程过程调用响应406(参见图4)发送回来。

图7示出了使用图5的散列计算506来指向下一个权限168的迭代过程来打开具有指定文件路径名518的文件的应用702的实例。为了比较的目的,图7示出了深度目录为“/a/b/c/d.txt”的实例,具有路径分量514“a”、“b”和“c”和文件名504“d.txt”,并且大目录为“/dir”,下方具有许多文件,诸如具有文件名504“a.txt”、“b.txt”、“c.txt”、“d.txt”、“e.txt”等的文件。目录名为502“dir”的目录具有索引节点号512“10”。文件名为540“a.txt”的文件的索引节点号是512“11”。在一些实施例中,索引节点号512可以称为目录的标识。

为了找到具有文件路径名“/dir/a.txt”的文件“a.txt”的文件句柄408,存储节点150对可以称为具有目录名“dir”以及文件名“a.txt”(例如,散列[10,a.txt])的目录的标识的索引节点号512“10”执行散列计算506。存储节点150采用散列计算的结果并且识别权限168(参见图5-7)。散列计算的结果标识具有文件“a.txt”的父目录索引节点(例如,索引节点号“10”)的权限。继续到存储节点150,权限168查找文件句柄408,这意味着与用于索引节点号512“11”的权限168相关联,该索引节点号是包含具有名称504“a.txt”的文件的目录的索引节点号。统计上,更经常地,在特定目录下具有不同文件名504的不同文件的文件句柄408将被存储在不同的存储节点150上。图5-7的实施例示出了如何以避免具有关于一个存储节点150上的目录下的文件的物理位置的所有信息的瓶颈状况的方式来分配大目录。因此,这些实施例有效地分配文件所有者的确定以消除对集中式查找表的需要。

继续到图7的右下部分的实例,应用程序702被示出为打开两个文件,一个具有深文件路径名(上文件路径名518a,具有多个路径分量514),并且一个具有浅文件路径名(下文件路径名518b)。定位浅文件路径名518b的文件句柄408如上所述地进行。在一些实施例中,定位深度文件路径名518a的文件句柄408如下进行。客户端nfs(网络文件系统)704使用父目录的索引节点号512和路径分量514的当前目录名称502、散列计算506和查找表510来连续地(例如从左到右)处理目录路径名516中的每个路径分量514,以便获得控制下一个索引节点的权限168。这个过程继续直到获得文件的父目录的索引节点号512(即,父索引节点号)为止。随后,应用上述过程,就好像文件路径名518a是浅的并且只有父目录一样。如上所述,该机制的结果指向文件句柄408。返回参考图4,在一些实施例中,客户端nfs704可以利用对存储集群160的一系列远程过程调用404来处理这些查询,从而接收作为远程过程调用响应406返回的信息。

图8是用于在存储系统中分配目录的方法的流程图,该方法可以通过图1-7的存储集群、存储节点和存储单元的实施例来实践。在各种实施例中,该方法可以由代表权限的存储节点的处理器来实践。在动作802中,将文件物理位置信息分配给存储节点中的所有者。例如,文件物理位置信息可以呈文件句柄的形式。在一些实施例中,所有者可以是权限。在动作804中,接收对属于目录的文件在存储系统中的位置信息的请求。这个请求可以例如作为远程过程调用源自文件系统、客户端或存储节点之一等。在动作806中,通过在存储系统的不同存储节点之间定位权限来确定文件的所有权。在一些实施例中,对文件的父目录的文件名和索引节点号执行散列计算以便确定所有权。基于散列计算结果来标识所有者。通过存储系统的消息系统将消息发送到由动作808中的散列计算结果标识的权限。在动作810中,从所有者获得文件物理位置信息。在动作812中,响应于该请求返回文件物理位置信息。例如,存储节点可以响应于诸如远程过程调用的请求来返回文件句柄。

应当理解,可以用诸如常规的通用计算机系统的数字处理系统来执行本文描述的方法。可以替代地使用被设计或编程来执行仅一种功能的专用计算机。图9是示出了可以实现在此描述的实施例的示例性计算设备的图示。根据一些实施例,图9的计算设备可以用于执行用于在存储集群和存储节点中分配和获取文件物理信息的功能的实施例。计算设备包括通过总线905耦合到存储器903的中央处理单元(cpu)901和大容量存储设备907。大容量存储设备907表示永久性数据存储设备,诸如磁盘驱动器,在一些实施例中,可以是本地的或远程的。在一些实施例中,大容量存储设备907可以实现后备存储设备。存储器903可以包括只读存储器、随机存取存储器等。在一些实施例中,驻留在计算设备上的应用程序可以存储在计算机可读介质上或者经由计算机可读介质访问,该计算机可读介质访问诸如存储器903或大容量存储设备907。应用程序也可以呈经调制的电子信号的形式,这些电子信号经由计算设备的网络调制解调器或其它网络接口调制访问。应当理解,在一些实施例中,cpu901可以体现在通用处理器、专用处理器或专门编程的逻辑器件中。

显示器911通过总线905与cpu901、存储器903和大容量存储设备907进行通信。显示器911被配置为显示与本文描述的系统相关联的任何可视化工具或报告。输入/输出设备909耦合到总线905,以便将命令选择中的信息传递给cpu901。应当理解,可以通过输入/输出设备909传递往返于外部设备的数据。cpu901可以被定义为执行本文描述的功能以启用参考图1-8描述的功能。在一些实施例中,体现该功能的代码可以被存储在存储器903或大容量存储设备907内,以供诸如cpu901的处理器来执行。计算设备上的操作系统可以是ms-windowstm、unixtm、linuxtm、iostm、centostm、androidtm、redhatlinuxtm、z/ostm或者其它已知操作系统。应当理解,本文描述的实施例也可以与虚拟化计算系统集成。

在此公开了详细的说明性实施例。然而,在此公开的具体功能细节仅仅是为了描述实施例的目的。然而,各实施例可以被实施为许多替代的形式并且不应被解释为仅限于在此提出的这些实施例。应当理解,虽然实施例是相对于文件系统描述的,但是实施例也可以扩展到基于对象的系统。

应当理解,虽然在此可以使用术语第一、第二等来描述各种步骤或计算,但是这些步骤或计算不应该被这些术语限制。这些术语仅用于将一个步骤或计算与另一个步骤或计算进行区分。例如,第一计算可以被称为第二计算,并且类似地,第二步骤可以被称为第一步骤,而不偏离本公开的范围。如本文使用的,术语“和/或”和“/”符号包括相关列出项目中的一个或多个的任何和所有组合。

如本文使用的,除非上下文明确地另外指出,否则单数形式“一个”、“一种”和“所述”旨在同样包括复数形式。将进一步理解,术语“包括(comprises)”、“包括(comprising)”、“包含(includes)”和/或“包含(including)”在本文使用时,规定存在所陈述的特征、整数、步骤、操作、元件和/或部件,但是不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、部件和/或其群组。因此,本文使用的术语是出于描述特定实施方案的目的而并不仅仅旨在限制。

还应注意到,在一些替代实现方式中,所提及的功能/动作可以不按附图中提到的顺序出现。例如,连续示出的两个附图实际上可以大致上同时执行,或者这些附图有时可以按相反的顺序执行,这取决于所涉及的功能性/动作。

考虑到上述实施例,应当理解,实施例可以采用涉及存储在计算机系统中的数据的各种计算机实现的操作。这些操作是需要对物理量进行物理操纵的操作。通常但不一定,这些量采取能够被存储、传输、组合、比较和以其它方式操纵的电或磁信号的形式。此外,所执行的操作经常被明确地称为诸如产生、识别、确定或比较。本文描述的构成实施例的一部分的任何操作是有用的机器操作。实施例还涉及用于执行这些操作的设备或装置。该装置可以根据所需目的而特别构造,或者该装置可以是由计算机中存储的计算机程序选择性地启动或配置的通用计算机。具体而言,根据本文的教义,各种通用机器可以与编写的计算机程序一起使用,或者构建更专业的装置来执行所需操作可以是更方便的。

模块、应用程序、层、代理或其它方法可操作实体可以被实现为硬件、固件或执行软件的处理器或其组合。应当理解,在本文公开了基于软件的实施例的情况下,软件可以体现在诸如控制器的物理机器中。例如,控制器可以包括第一模块和第二模块。控制器可以被配置为执行例如方法、应用程序、层或代理的各种动作。

这些实施例也可以体现为非暂时性计算机可读介质上的计算机可读代码。计算机可读介质是可以存储数据的任何数据存储设备,其随后可以由计算机系统读取。计算机可读介质的实例包括硬盘驱动器、网络附加存储(nas)、只读存储器、随机存取存储器、cd-rom、cd-r、cd-rw、磁带以及其它光学和非光学数据存储设备。计算机可读介质还可以分配在网络联接的计算机系统上,从而使得计算机可读代码被以分配的方式存储和执行。本文描述的实施例可以用包括手持设备、平板电脑、微处理器系统、基于微处理器或可编程消费电子产品、小型计算机、大型计算机等的各种计算机系统配置来实践。实施例还可以在分布式计算环境中实践,其中由通过有线或无线网络加以链接的远程处理设备来执行任务。

尽管以特定顺序描述了这些方法操作,但是应当理解,其他操作可以在所描述的操作之间执行,可以调整所描述的操作从而使得它们在略微不同的时间发生,或者所描述的操作可以分布在系统中,该系统允许这些处理操作以与该处理相关联的各种时间间隔发生。

在各种实施例中,本文描述的方法和机制的一个或多个部分可以形成云计算环境的一部分。在这类实施例中,可以根据一个或多个不同模型在互联网上提供资源作为服务。这类模型可以包括基础架构即服务(iaas)、平台即服务(paas)和软件即服务(saas)。在iaas中,计算机基础架构作为服务来递送。在这种情况下,计算设备通常由服务提供商拥有和操作。在paas模型中,由开发人员用来开发软件解决方案的软件工具和底层设备可以作为服务来提供并且由服务提供商托管。saas通常包括服务提供商许可软件作为按需服务。服务提供商可以托管软件,或者可以将软件部署给客户给定的时间段。上述模型的许多组合是可能的并且是可以预期的。

可以将各种单元、电路或其它部件描述或要求为“被配置为”执行一个或多个任务。在这种上下文中,短语“被配置为”被用于通过指示单元/电路/部件包括在操作期间执行一个或多个任务的结构(例如,电路)来暗示结构。因此,即使当指定的单元/电路/部件当前未操作(例如,未开启),也可以说该单元/电路/部件被配置为执行该任务。与“被配置为”语言一起使用的单元/电路/部件包括硬件,例如电路、存储程序指令的存储器,这些程序指令可执行来实现操作等。陈述了单元/电路/部件“被配置为”执行一个或多个任务对于该单元/电路/部件明确旨在不援引35u.s.c.112,第六款。此外,“被配置为”可以包括由软件和/或固件(例如,fpga或执行软件的通用处理器)操纵的通用结构(例如,通用电路)以便以能够执行争议中的该或这些任务的方式来操作。“被配置为”还可以包括适配制造过程(例如,半导体制造设施)以便制造适于实现或执行一个或多个任务的设备(例如,集成电路)。

出于解释目的,已经参考具体实施例描述了上述描述。然而,以上的说明性讨论并不旨在是排他性的或将本发明限制于所公开的明确形式。鉴于上述教义,许多修改和变化是可能的。选择和描述实施例是为了最佳地解释实施例的原理及其实际应用,以便由此使本领域其他技术人员能够最佳地利用实施例以及可以适合于设想的特定用途的各种修改。因此,本实施例将认为是说明性的而非限制性的,并且本发明并不局限于在此给出的细节,但是可以在所附权利要求书的范围和等效物中进行修改。

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