用于构建可扩展存储设备的方法、装置和扩展的存储设备与流程

文档序号:11828624阅读:165来源:国知局
用于构建可扩展存储设备的方法、装置和扩展的存储设备与流程

本公开的实施例涉及存储领域,更具体地涉及用于构建可扩展的存储设备的方法、装置和计算机程序产品,以及根据该方法构建的存储设备。



背景技术:

传统的存储设备,例如存储阵列,通常利用扩展性相对有限的方式来构造,并且因此通常仅针对预定义的最优使用场景而设计。这样的构造方法缺少灵活性。例如,针对不同的使用场景可能需要不同的设计,从而用户可能针对不同的使用场景需要采购不同的产品。这不利于用户重用已有的存储资源,增加了用户的成本。对于制造商来说,针对具体的使用场景来构造特定的存储产品也限制了其产品的使用范围,增加了其研发成本。此外,大部分传统的存储设备基于专有硬件设计,这进一步限制了存储产品构造的灵活性。

基于以上所述问题,本公开的实施例提出了用于构建可扩展的存储设备的方法和装置。



技术实现要素:

为了解决以上提到的问题中的至少一些问题,本公开的实施例引入一种基于模块化的构建块来构造高度可扩展的存储系统的方法和装置,并且提出了新的IO处理流程来实现扩展的非集中化的和高性能的系统。

根据本公开的第一方面,提供了一种用于构建可扩展的存储设备的方法,包括:通过组合多个模块化的构件块来构建所述可扩展 的存储设备;其中该多个模块化的构件块中的每个模块化的构件块包括磁盘封装;并且该多个模块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元;利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群;以及利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务。

在一个实施例中,所述多个模块化的构件块中仅第一模块化的构件块包括所述存储处理器;并且其中通过组合多个模块化的构件块来构造所述可扩展的存储设备包括:通过将所述第一模块化的构件块与所述多个模块化的构件块中的每一个其它模块化的构件块连接来构建所述可扩展的存储设备。

在另一实施例中,所述多个模块化的构件块中每一个模块化的构件块均包括所述存储处理器;并且其中通过组合多个模块化的构件块来构造所述可扩展的存储设备包括:通过将所述多个模块化的构件块中的每一个模块化的构件块互相连接来构建所述可扩展的存储设备。

在又一实施例中,所述多个模块化的构件块包括第一组模块化的构件块和第二组模块化的构件块,并且仅所述第一组模块化的构件块包括所述存储处理器;并且其中通过组合多个模块化的构件块来构造所述可扩展的存储设备包括:通过将所述第一组模块化的构件块中的每一个模块化的构件块互相连接,并且将所述第一组模块化的构件块中的每一个模块化的构件块与所述第二组模块化的构件块中的一个或者多个模块化的构件块连接,来构建所述可扩展的存储设备。

在一个实施例中,利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群可以进一步包括:选取所述集群中的一个输入输出处理单元作为所述集群的头;其中所述集群的头服务于所述元数据更新请求;并且所述集群中的每个输入输出处理单元有能力提供所述元数据服务和数据服务。

在另一实施例中,利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群可以进一步包括:在所述集群的头失效时,选取所述集群中的另一个输入输出处理单元作为所述集群的新的头。

在又一实施例中,利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务可以进一步包括:在一个输入输出处理单元启动时,通过所述元数据服务向其它输入输出处理单元通知所述一个输入输出处理单元上所附接的本地磁盘。

在进一步的实施例中,利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务还可以包括:按照一致的哈希算法确定数据的存储位置,使得数据能够跨所有的所述存储处理器均匀地分布。

在一个实施例中,其中按照一致的哈希算法确定数据的存储位置包括:基于输入或输出I/O请求中的卷标识符和偏移值来计算哈希值;确定与所述哈希值对应的硬盘驱动器的列表;查询元数据服务,以确定直接附接到所述列表中的硬盘驱动器的输入输出处理单元,并且获得所确定的所述输入输出处理单元中每个输入输出处理单元的输入输出负载状况;以及基于所述查询的结果,从所确定的直接附接到所述列表中的硬盘驱动器的输入输出处理单元中选择用于处理所述I/O请求的输入输出处理单元。

在另一实施例中,所述列表中包括的硬盘驱动器的数量大于一个,并且所述数量能够被终端用户定义。

在又一实施例中,利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务可以进一步包括:向所选择的用于处理所述I/O请求的输入输出处理单元发送所述I/O请求。

根据本公开的第二方面,提供了一种用于构建可扩展的存储设备的装置,该装置包括:组合单元,被配置为通过组合所述多个模块化的构件块来构建所述可扩展的存储设备;其中所述多个模块化的构件块中的每个模块化的构件块包括磁盘封装;并且所述多个模 块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元;集群形成单元,被配置为利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群;以及集群处理单元,被配置为利用该集群来处理来自主机的输入或输出I/O请求以及元数据服务。

在一个实施例中,所述多个模块化的构件块中只有第一模块化的构件块包括所述存储处理器;并且其中所述组合单元被配置为通过将所述第一模块化的构件块与所述多个模块化的构件块中的每一个其它模块化的构件块连接来构建所述可扩展的存储设备。

在另一实施例中,所述多个模块化的构件块中每一个模块化的构件块均包括所述存储处理器;并且其中所述组合单元被配置为通过将所述多个模块化的构件块中的每一个模块化的构件块互相连接来构建所述可扩展的存储设备。

在又一实施例中,所述多个模块化的构件块包括第一组模块化的构件块和第二组模块化的构件块,并且仅所述第一组模块化的构件块包括所述存储处理器;并且其中所述组合单元被配置为:通过将所述第一组模块化的构件块中的每一个模块化的构件块互相连接,并且将所述第一组模块化的构件块中的每一个模块化的构件块与所述第二组模块化的构件块中的一个或者多个模块化的构件块连接,来构建所述可扩展的存储设备。

在一个实施例中,集群形成单元可以进一步被配置为:选取所述集群中的一个输入输出处理单元作为所述集群的头;其中所述集群的头服务于所述元数据更新请求;并且其中所述集群中的每个输入输出处理单元能够提供所述元数据服务和数据服务。

在另一实施例中,集群形成单元可以进一步被配置为在所述集群的头失效时,选取所述集群中的另一个输入输出处理单元作为所述集群的新的头。

在一个实施例中,集群处理单元可以进一步被配置为在一个输入输出处理单元启动时,通过所述元数据服务向其它输入输出处理 单元通知所述一个输入输出处理单元上所附接的本地磁盘。

在另一实施例中,集群处理单元可以进一步被配置为按照一致的哈希算法确定数据的存储位置,使得数据能够跨所有的所述存储处理器均匀地分布。

在又一实施例中,集群处理单元可以进一步被配置为:基于输入或输出I/O请求中的卷标识符和偏移值来计算哈希值;确定与所述哈希值对应的硬盘驱动器的列表;查询元数据服务,以确定直接附接到所述列表中的硬盘驱动器的输入输出处理单元,并且获得所确定的所述输入输出处理单元中每个输入输出处理单元的输入输出负载状况;以及基于所述查询的结果,从所确定的直接附接到所述列表中的硬盘驱动器的输入输出处理单元中选择用于处理所述I/O请求的输入输出处理单元。

在进一步的实施例中,所述列表中包括的硬盘驱动器的数量大于一个,并且所述数量能够被终端用户定义。

在一个实施例中,集群处理单元可以进一步被配置为向所选择的用于处理所述I/O请求的输入输出处理单元发送所述I/O请求。

根据本公开的第三方面,提供了一种用于构建可扩展的存储设备的装置,包括至少一个处理器;以及至少一个包括计算机程序代码的存储器,其中所述至少一个存储器和所述计算机程序代码被配置为,与所述至少一个处理器一起,促使所述装置执行根据本公开的第一方面所述的任一方法。

根据本公开的第四方面,提供了一种计算机程序产品,所述计算机程序产品被体现在计算机可读的介质中并且包括计算机可读程序指令,当被加载到装置中时,所述计算机可读程序指令执行根据本公开的第一方面所述的任一方法。

根据本公开的第五方面,提供了经扩展得到的存储设备,所述设备包括:

根据本公开的第二方面所述的任一装置,以及多个模块化的构件块;其中所述多个模块化的构件块中的每个模块化的构件块包括 一个或者多个磁盘封装;并且其中所述多个模块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元。

附图说明

现在仅通过示例并且参照附图描述根据本公开的实施例的方法和/或装置的一些实施例,在附图中:

图1图示根据本公开的实施例用于构建可扩展的存储设备的方法的流程图;

图2A-2B示出根据本公开的实施例的模块化的构建块的示意图;

图3A-3C示意性地示出根据本公开的实施例通过组合多个模块化的构建块而构造的存储设备的示意图;以及

图4示意性地示出根据本公开的实施例的用于构建可扩展的存储设备的装置的结构框图。

具体实施方式

以下将参考附图详细描述本公开的各个示例性实施例。

应当理解,给出这些示例性实施例仅仅是为了使本领域技术人员能够更好地理解并进而实现本公开,而并非以任何方式限制本公开的范围。

在本文中,对“一个实施例”、“另一实施例”或“一个优选实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但每个实施例不一定必须包括该特定特征、结构或特性。而且,这些术语并不一定指相同的实施例。

还应理解,在此处使用的各种术语仅用于描述特定实施例的目的,而不旨在于限制本公开。如这里使用的单数形式“一”和“该”可以包括复数形式,除非上下文中有明确的相反指示。还应理解,此处使用的术语“包括”、“具有”和“包含”指示所述特征、单元和/或组件 等的存在,但不排除一个或多个其他特征、单元、组件和/或其组合的存在。如这里使用的术语“多个”表示“两个或更多”。如这里使用的术语“和/或”可以包括关联列出的各项中的一项或多项的任何和所有组合。其他术语的定义将在下文描述中具体给出。

另外,在以下描述中,将省略一些本领域技术人员所熟知的功能或者结构,以避免它们把本公开的实施例掩盖在不必要的细节中。

本公开的实施例涉及用于构建可扩展的存储设备的方法和装置,以改进存储设备构建的灵活性,并且提高存储设备的性能。

为便于说明,下面的一些实施例将使用特定的模块化的构建块来构造可扩展性的存储系统,但是本领域技术人员能够理解,本公开的实施例的方法和装置不限于特定的模块化的构建块,即,本过来的实施例的方法和装置对模块化的构建块硬件类型没有限制,可以适用于任意硬件。

图1示意性地示出根据本公开的一个实施例的示例方法100的流程图。如图1所示,该方法100包括:在步骤S101,通过组合所述多个模块化的构件块来构建所述可扩展的存储设备;其中所述多个模块化的构件块中的每个模块化的构件块包括磁盘封装;并且所述多个模块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元;在步骤S102,利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群;以及在步骤S103,利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务。

该方法100能够根据实际需要利用可变数目的模块化的构建块来构造可扩展的存储设备,具有灵活性高的优势。

在本文中,“模块化的构件块”和“模块化引擎”可以互换地使用。在一个实施例中,在硬件层级,模块化的构件块(模块化引擎)可以基于2U机箱,即一个2U机箱中的装置作为一个模块化的构建块。但是,如本领域技术人员能够理解的,本公开的实施例并不限于此,模块化的构建块可以基于任意的硬件结构,例如,其可以基 于1U、4U机箱或者基于其他的结构。

在一些实施例中,假定模块化的构建块基于2U机箱。每个2U机箱可以被分成若干个单独的空间,例如取决于硬件设计,可以被分为2、3或者4个单独的空间。一些空间用于具有硬盘驱动器和输入输出(IO)扩展器的高密度磁盘封装(DE)。一个或者多个空间用于存储处理器(SP)。该存储处理SP具有中央处理单元(CPU)、存储器和母板,其能够运行全功能的类似Linux的操作系统(OS),然而,如本领域技术人员能够理解的,本公开的实施例对该操作系统的类型没有限制,即,其可以是任何合适的操作系统。

在一个实施例中,软件栈被构建于存储处理器(SP)之上。软件栈的底层可以是,例如但不限于,Linux OS和Linux容器。Linux容器能够提供便携的、轻量的运行时环境用于核心存储堆栈。可以使用Linux容器来创建至少三个或者更多的分离的运行时环境。其中第一Linux容器可以被称为“控制器”,其为整个存储系统提供管理服务。第2和第3个Linux容器可以被称为“输入输出处理单元”(“IOPU”),其管理磁盘封装并提供块设备。利用两个或者更多的IOPU能够提供高存储系统的可用性。

在一个实施例中,步骤S101中所组合的多个模块化的构件块包括多个现有的模块化的构建块;而该模块化的构建块的生成不一定是该方法100的一部分。

在一个实施例中在步骤S101中组合的多个模块化的构建块中可以只有第一模块化的构件块包括所述SP;并且步骤S101包括通过将所述第一模块化的构件块与所述多个模块化的构件块中的每一个其它模块化的构件块连接来构建所述可扩展的存储设备。在一个实施例中,该连接可以经由例如输入输出扩展器进行,但是本公开的实施例并不限于此,而是也可以采用任何合适的替代连接方式。在该实施例中,在步骤S102第一模块化的构件块中的(一个或者多个)SP构成集群,用以在步骤S103处理输入或输出I/O请求以及元数据服务。

类似于该第一模块化的构建块的、具有SP的构建块可以被称为全功能模块化引擎(FFME),该FFME包括磁盘封装(DE)和存储处理器(SP)两者。在图2A中示出了FFME的一种示例实施结构。

在该实施例中,多个模块化的构件块中第一模块化的构建块之外的每一个其它模块化构建块只包括磁盘封装,不包括SP。这样的模块化引擎可以被称为只有磁盘驱动的模块化引擎(DDME)。该DDME的一种示例实施结构如图2B所示。

作为示例而非限制,FFME和DDME可以基于开放计算项目(OCP)设计。开放计算硬件是采用已被证明可靠的技术的一种开放硬件平台。其足够成熟,能够被用于在其上实现商业存储阵列。例如,在硬件层级,图2A中的左和右的DE可以被基于OCP项目Torpedo用作磁盘封装。在一个具体示例中,在DE内部,具有内部SAS扩展器、被布置成3x5的阵列的15个3.5"驱动器以及2个80mm的风扇。图2A中的中央空间可以被用于存储控制器(即SP)。该存储控制器可以例如基于OCP AMD母板硬件v2.0构建。例如,其具有2个AMD CPU和4信道双倍速率(DDR)存储器。在存储控制器硬件之上,可以使用开源Linux容器“docker”来构建软件栈。

在图3A中示出了在一个实施例中通过步骤S101将FFME和DDME经由输入输出扩展器连接构造可扩展的存储设备的示意图。如此构建的该存储设备的结构在本文可以被称为“单FFME+多DDME”架构。在该实施例中,在该实施例中,该FFME中的(一个或者多个)SP构成集群,即,所有的IO请求在该FFME上被服务。这种系统能够适用于要求庞大的磁盘容量但是少的IO工作量的使用场景。

在另一个实施例中,在步骤S101中组合的多个模块化的构件块中每一个模块化的构件块均包括所述存储处理器(SP);并且步骤S101包括通过将所述多个模块化的构件块中的每一个模块化的构件块互相连接来构建所述可扩展的存储设备。在一个实施例中,该互相连接可以经由例如IP网络线路来执行,但是本公开的实施例不限 于此,而是可以通过任何适当的连接方式进行。在该实施例中,在步骤S102,该多个模块化的构件块中的所有SP构成集群。

在图3B中示出了在一个实施例中通过步骤S101将多个FFME经由IP网络线路互相连接构造可扩展的存储设备的示意图。由于被连接的各构建块具有相同的结构,如此构建的该存储设备的架构可以被称为“对称架构”。其中所有的FFME被通过网络线路连接,例如通过IP网络交换连接,并且形成活跃/活跃集群,或者可以称为双活集群,即,被连接的每一侧均是激活的和可用的。在该示例中,多个FFME中的所有SP构成集群来处理输入或输出I/O请求以及元数据服务。其中集群中的每个SP能够处理IO请求。也就是说,任何IO请求可以在每个FFME上被处理。因此,该实施例可以适用于要求高IO负载的使用场景。例如,根据该实施例,每个FFME具有SP,则当IO请求例如随机地到达某一个SP时,该SP能够根据自己的状态,例如负载情况,来判断是否能够处理该IO请求;如果不能处理,则可以将其转发给其他的SP来处理。由于每个SP能够处理任意的IO,这使得IO处理工作量能够被分散的处理,提高了存储系统的性能。

在又一实施例中,在步骤S101中组合的多个模块化的构件块包括第一组模块化的构件块和第二组模块化的构件块,并且仅所述第一组模块化的构件块(例如FFME)包括所述存储处理器;并且其中步骤S101包括通过将所述第一组模块化的构件块中的每一个模块化的构件块互相连接(例如经由IP网络线路)、并且将所述第一组模块化的构件块中的每一个模块化的构件块与所述第二组模块化的构件块(例如DDME)中的一个或者多个模块化的构件块连接(例如经由输入输出扩展器)来构建所述可扩展的存储设备。

在图3C中示出了该实施例的示意图。其可以被看作是通过图3A和图3B的实施例的混合来构建存储设备的示例。如此构建的存储设备的结构可以被称为“混合架构”。应该注意,尽管在图3C中每个FFME连接相同数目的DDME,但是本公开的实施例不限于此。 在一些实施例中,第一组模块化的构建块中的每个构建块可以连接第二组构建块中不同数目的构建块。

在一个实施例中,在步骤S101,利用例如图3B或者3C中的所有FFME中的所有SP中的输入输出处理单元(IOPU)形成集群。在每个FFME中可以包括单个SP用于IO处理,以及一个或者多个DE用于提供磁盘容量;也可以包括更复杂的配置以满足大规模的容量和性能使用情况,例如,一个FFME可以包括两个或者更多个SP。在一个实施例中,该集群可以是PAXOS组,即,所有SP中的所有IOPU形成PAXOS组以处理数据、元数据和集群状态管理。一种示例实施能够使用Apache Zookeeper作为非集中化的元数据服务用于元数据存储、全局锁、以及集群状态管理。

在一个实施例中,步骤S102进一步包括,选取所述集群中的一个输入输出处理单元作为所述集群的头,其中所述集群的头服务于所述元数据更新请求;并且其中所述集群中的每个输入输出处理单元有能力提供所述元数据服务和数据服务。

在一个实施例中,元数据服务管理所有的物理硬盘以及逻辑卷的块位置映射。数据服务处理其所有本地附接的驱动器的物理硬盘驱动器的I/O。

在另一实施例中,步骤S102进一步包括,在所述集群的头失效时,选取所述集群中的另一个输入输出处理单元作为所述集群的新的头。在一个示例性实施例中,可以根据PAXOS算法来确定集群中哪个IOPU作为头,以及在集群的当前头失效后确定新头的选举。

在又一实施例中,步骤103可以进一步包括:在一个输入输出处理单元启动时,通过元数据服务向集群中的其它输入输出处理单元通知该输入输出处理单元上所附接的本地磁盘。例如,在加电时,IOPU启动并且加入存储系统,其向元数据服务报告所有的本地附接的驱动器;元数据服务之间通过PAXOS进行通信,交换元数据的信息。因此,当一个IOPU的元数据服务获知了其硬盘驱动器的信息,该元数据服务将通过PAXOS告诉其他IOPU的元数据服务,从而每 个IOPU上的元数据服务能够获知所有IOPU的磁盘信息。任何元数据的改变由PAXOS组(即,集群)管理,并且跨SP的所有IOPU进行同步。

在一个实施例中,步骤103可以进一步包括:按照一致的哈希算法确定数据的存储位置,使得数据能够跨所有的多个模块化的构建块均匀地分布。在一个示例中,存储系统中的所有的硬盘驱动器形成一致的哈希环。基于哈希值,每个驱动器负责数据的一个范围。一致的哈希例如可以基于卷唯一ID和块偏移来分割数据。

在一个实施例中,在步骤S103中,按照一致的哈希算法确定数据的存储位置可以包括以下操作:

基于输入或输出I/O请求中的卷标识符和偏移值来计算哈希值;

确定与所述哈希值对应的硬盘驱动器的列表;

查询元数据服务,以确定直接附接到所述列表中的硬盘驱动器的输入输出处理单元以及获得所确定的所述输入输出处理单元中每个输入输出处理单元的输入输出负载状况;以及

基于所述查询的结果,从所确定的直接附接到所述列表中的硬盘驱动器的输入输出处理单元中选择用于处理所述I/O请求的输入输出处理单元。

在一个实施例中,可以在I/O请求所到达的SP中执行以上操作。

在一个实施例中,可以使用哈希表来记录哈希值和数据位置的映射。该哈希表可以被看作是一种元数据,其存储的位置可以由PAXOS算法来确定,例如,可以不仅仅存储在PAXOS组头,或者说集群头中,而是分布式地存储于多个IOPU中。

在另一实施例中,步骤S103中所确定的与哈希值对应的硬盘驱动器的列表中可以包括的硬盘驱动器的数量N大于1,并且所述数量N能够被终端用户定义。也就是说,每一数据被存储在至少两个硬盘驱动器上以用于容错,而用户能够定义数据副本的数量。

在又一实施例中,基于所述查询的结果来选择用于处理所述I/O请求的输入输出处理单元包括选择当前负载最小的IOPU。在一个示 例中,元数据服务可以维护该存储设备中所有硬件和软件部件的健康信息,从而通过查询该元数据服务,能够防止将I/O请求转发到有故障的SP。以这种方式,失效转移能够被有效的完成。

在一个实施例中,步骤S103可以进一步包括:向所选择的用于处理所述I/O请求的输入输出处理单元发送所述I/O请求。在一个示例中,如果该I/O请求为写请求,则在步骤S103,向所选择的IOPU发送该写请求。所选择的IOPU然后可以接收该写请求并向硬盘存储数据。然后可以在写请求完成后返回成功。在另一示例中,如果该I/O请求为读请求,则在步骤S103,向所选择的IOPU发送该读请求。所选择的IOPU然后可以接收该读请求并从硬盘读取数据。并且,在读请求完成后返回成功。

以上参照附图1描述了根据本公开的实施例的用于构建可扩展的存储设备的方法。该方法的优点至少在于:

(1)提供模块化的设计,使得能够使用构建块的不同组合来形成复杂的存储系统,来满足不同的工作量要求;

(2)扩展性好;该方法允许使用一致的哈希和PAXOS组来消除由单个故障引起的系统故障以及消除性能热点,使得单点的负担不会太重;

(3)成本低并且没有硬件锁定。也就是说,该方法对硬件类型没有限制,可以适用于任意硬件。例如类似OCP的商业硬件能够被作为模块化的构建块用于根据本公开的实施例的方法生产低成本的扩展的存储系统。

同时,该方法100能够有效处理任何硬件和软件部件故障,例如:

1)IOPU元数据服务维护所有硬件和软件部件的健康信息,从而失效转移能够被有效的完成。

2)每片数据具有多个副本,从而单个或者两个硬盘驱动器故障不影响数据可用性。

3)IOPU元数据服务使用PAXOS来复制数据,因此没有单点故 障。

4)允许采用多个SP,使得存储系统能够容忍SP故障,例如CPU/存储器/母板故障;

5)允许每个SP具有多个IOPU并且能够处理IOPU的软件故障。

应该注意的是,尽管本公开的某些示例性实施例以两个模块化的构建块为例描述了构建可扩展的存储设备的方法,但是,如本领域技术人员能够理解的,该方法同样适用于利用任何数目的构建块实现存储设备的扩展。在实际实施中,可以根据需要,通过参考图1-3所述的任一方法来组合可变数目的模块化的构建块来实现扩展。

以下将参照图4描述根据本公开的实施例的用于构建可扩展的存储设备的装置400。该装置可以实施参照图1所述的任一实施例的方法,但是不限于实施该方法100;而参考图1所述的方法100可以由该装置400实施,但是不限于由该装置400实施。例如,在一些实施例中,方法100的至少一个步骤可以由另外的装置来实施。

如图4所示,该装置400包括组合单元401,被配置为通过组合所述多个模块化的构件块来构建所述可扩展的存储设备;其中所述多个模块化的构件块中的每个模块化的构件块包括磁盘封装;并且所述多个模块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元;以及集群形成单元402,被配置为利用所述至少一个模块化的构件块中的所述输入输出处理单元形成集群;以及,集群处理单元403,被配置为利用所述集群来处理来自主机的输入或输出I/O请求以及元数据服务。

根据一个实施例,组合单元401、集群形成单元402和集群处理单元403分别能够被配置为实施参考图1所述的步骤S101、S102和S103的操作。因此,参考图1所进行的关于步骤S101、S102和S103的描述在这里同样适用。

在一个实施例中,组合单元401所组合的多个模块化的构件块中只有第一模块化的构件块包括所述存储处理器;并且其中所述组合单元401被配置为通过将所述第一模块化的构件块与所述多个模 块化的构件块中的每一个其它模块化的构件块连接来构建所述可扩展的存储设备。在一个实施例中,该互相连接可以经由例如输入输出扩展器来执行,但是本公开的实施例不限于此,而是可以通过任何适当的连接方式进行。

在另一实施例中,组合单元401所组合的多个模块化的构件块中每一个模块化的构件块均包括所述存储处理器;并且其中所述组合单元401被配置为通过将所述多个模块化的构件块中的每一个模块化的构件块互相连接来构建所述可扩展的存储设备。在一个实施例中,该互相连接可以经由例如IP网络线路来执行,但是本公开的实施例不限于此,而是可以通过任何适当的连接方式进行。

在又一实施例中,组合单元401所组合的多个模块化的构件块包括第一组模块化的构件块和第二组模块化的构件块,并且仅所述第一组模块化的构件块(例如FFME)包括所述存储处理器,也就是说,所述多个模块化的构件块中的第二组模块化的构件块(例如DDME)不包括所述存储处理器;并且其中所述组合单元401被配置为通过将所述第一组模块化的构件块中的每一个模块化的构件块(例如,经由IP网络线路)互相连接、并且将所述第一组模块化的构件块中的每一个模块化的构件块与所述第二组模块化的构件块中的一个或者多个模块化的构件块(例如,经由输入输出扩展器)连接来构建所述可扩展的存储设备。

在本公开的一个实施例中,集群形成单元402可以进一步被配置为选取所述集群中的一个输入输出处理单元作为所述集群的头,所述集群的头服务于所述元数据更新请求;并且其中所述集群中的每个输入输出处理单元有能力提供所述元数据服务和数据服务。

在另一实施例中,集群形成单元402可以进一步被配置为在所述集群的头失效时,选取所述集群中的另一个输入输出处理单元作为所述集群的新的头。

在一个实施例中,集群处理单元403可以进一步被配置为在一个输入输出处理单元启动时,通过所述元数据服务向该集群中的其 它输入输出处理单元通知所述一个输入输出处理单元上所附接的本地磁盘。

在另一实施例中,集群处理单元403可以进一步被配置为按照一致的哈希算法确定数据的存储位置,使得数据能够跨所有的所述存储处理器均匀地分布。

在一个示例实施例中,集群处理单元403可以进一步被配置为执行如下操作:

基于输入或输出I/O请求中的卷标识符和偏移值来计算哈希值;

确定与所述哈希值对应的硬盘驱动器的列表;

查询元数据服务,以确定直接附接到所述列表中的硬盘驱动器的输入输出处理单元以及获得所确定的所述输入输出处理单元中每个输入输出处理单元的输入输出负载状况;以及

基于所述查询的结果,从所确定的直接附接到所述列表中的硬盘驱动器的输入输出处理单元中选择用于处理所述I/O请求的输入输出处理单元。

在另一实施例中,所确定与哈希值对应的硬盘驱动器的列表中包括N>1个硬盘驱动器,并且数量N能够被终端用户定义。

在一个实施例中,集群处理单元403可以进一步被配置为向所选择的用于处理所述I/O请求的输入输出处理单元(IOPU)发送所述I/O请求。然后所选择的IOPU可以处理该请求。

如上所述,根据本公开的实施例的方法100和装置400利用单个模块化的构建块来构造可扩展的存储系统,提供良好的构造灵活性并能够改进存储系统的容许性能。

尽管在一些实施例中以一些特定的部件(例如2U机箱,基于OCP的硬件)以及特定的算法(例如PAXOS算法)为例描述了本公开提出的方法/装置的实施方式,但是,如本领域技术人员能够理解的,本公开的实施例并不限于此,而是可以被更广泛地应用。

本领域技术人员应当认识到,这里描述的任何结构图表示实现本公开的原理的说明性原理图。类似地,应当理解,这里描述的流 程图表示可以在机器可读介质中具体表示并且由机器或处理设备执行的各种过程,不论这样的机器或处理设备是否被明确示出。在一些实施例中,流程图中的一些操作也可以手动地完成。

本领域普通技术人员还应当理解,本公开提到的方法步骤中的一个或者多个方法步骤也可以在单个功能块中实现或者由单个设备实现,而在一些实施例中,一个功能块也可能实现多个方法步骤或者多个功能块的功能。流程图中的步骤可以以任何适当的顺序执行,而不一定按照所示出的顺序。

根据本公开的实施例的装置400所包含的各单元可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。例如,在某些实施方式中,装置400可以利用软件和/或固件来实现。备选地或附加地,装置400可以部分地或者完全地基于硬件来实现。例如,装置400中的一个或多个单元可以实现为集成电路(IC)芯片、专用集成电路(ASIC)、片上系统(SOC)、现场可编程门阵列(FPGA),等等。本公开的范围在此方面不受限制。另外,在一些实施例中装置400中的单个装置也可以被多个装置来实现;在另一些实施例中,装置400中的多个装置的功能也可以被实施为单个装置。在一些实施例中,可以由用户手动地实施某些单元的功能,在装置情况下,该单元可以不通过机器、软件、意见和/或固件来实施。

本公开可以是系统、装置、设备、方法和/或计算机程序产品。根据本公开的一个实施例,本公开可以通过一种构建可扩展的存储设备的装置来实现,该装置包括至少一个处理器;以及至少一个包括计算机程序代码的存储器,其中所述至少一个存储器和所述计算机程序代码被配置成与所述至少一个处理器一起,促使所述装置执行前文参考图1所述的任一方法。根据本公开的另一实施例,本发明可以通过一种计算机程序产品来实现,所述计算机程序产品被体现在计算机可读的介质中并且包括计算机可读程序指令,当被加载到装置中时,所述计算机可读程序指令执行根据本公开的实施例的任一方法。

本公开的一个实施例还提供经扩展得到的存储设备,所述设备按照参考图1所述的任一方法构建而成,并且/或者,所述设备包括根据参考图4所述的任一装置400,以及多个模块化的构件块;其中所述多个模块化的构件块中的每个模块化的构件块包括一个或者多个磁盘封装;并且其中所述多个模块化的构件块中的至少一个模块化的构件块包括存储处理器,所述存储处理器包括输入输出处理单元。

上面结合附图所进行的描述只是为了说明本公开而示例性给出的。本领域技术人员可以理解,能够基于上面所描述的本公开的原理提出不同的结构,虽然这些不同的结构未在此处明确描述或示出,但都体现了本公开的原理并被包括在其精神和范围之内。此外,所有此处提到的示例明确地主要只用于教导目的,以帮助读者理解本公开的原理以及发明人所贡献的促进本领域的构思,并不应被解释为对本公开范围的限制。此外,本文所有提到本公开的原则、方面和实施方式的陈述及其特定的示例包含其等同物在内。

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