组建EC条带的方法和装置转让专利

申请号 : CN201810999133.2

文献号 : CN110865901B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴延赞魏明昌

申请人 : 华为技术有限公司

摘要 :

本申请公开了组建EC条带的方法和装置,涉及数据处理技术领域,用以提高分布式存储系统的整体性能。该方法应用于包括至少两个存储节点的分布式存储系统,至少两个存储节点上部署有管理一个分区中的数据块的N个数据处理模块;方法包括:获取每个数据处理模块所在的存储节点的标识信息;根据每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合;待组建EC条带集合包括N列数据块,一个数据处理模块用于管理一列数据块,任意两个待组建EC条带的列组合不同,管理同一待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同;根据每个待组建EC条带的列组合,组建每个待组建EC条带。

权利要求 :

1.一种组建纠删码EC条带的方法,其特征在于,应用于分布式存储系统,所述分布式存储系统包括至少两个存储节点,所述至少两个存储节点上部署有N个数据处理模块,N≥2,N是整数;所述N个数据处理模块用于管理分区中的数据块;所述方法包括:获取所述N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息;

根据所述每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合;其中,所述待组建EC条带集合包括N列数据块,所述N个数据处理模块中的一个数据处理模块用于管理所述N列数据块中的一列数据块,任意两个所述待组建EC条带的列组合不同;所述待组建EC条带的列组合是所述待组建EC条带包括的数据块所在的列构成的集合,管理同一所述待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同;

根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带。

2.根据权利要求1所述的组建EC条带的方法,其特征在于,所述分区包含一个或多个EC条带;所述根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带,包括:在所述一个或多个EC条带中获取K个EC条带;K≥1,所述K是整数;

将所述K个EC条带中的有效数据块进行重建,得到所述每个待组建EC条带;其中,所述K个EC条带中的有效数据块的个数与所述待组建EC条带集合中的数据块的个数相等,且所述重建前后参与所述重建的有效数据块所在的列相同。

3.根据权利要求2所述的组建EC条带的方法,其特征在于,所述在所述一个或多个EC条带中获取K个EC条带,包括:

根据动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带;其中,所述动态规划算法使得所述K个EC条带中的有效数据块重建后得到所述每个待组建EC条带。

4.根据权利要求3所述的组建EC条带的方法,其特征在于,所述根据动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带,包括:获取所述一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组合;

根据所述各EC条带中有效数据块所在的列构成的列组合、所述每个待组建EC条带的列组合和所述动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带。

5.根据权利要求4所述的组建EC条带的方法,其特征在于,所述动态规划算法使得所述一个或多个EC条带中参与所述重建的EC条带的个数最大。

6.根据权利要求2至5任一项所述的组建EC条带的方法,其特征在于,在所述将所述K个EC条带中的有效数据块进行重建,得到所述每个待组建EC条带之后,所述方法还包括:同时存储所述每个待组建EC条带的条带信息,其中,所述待组建EC条带的条带信息包括所述待组建EC条带包括的数据块的信息和校验块的信息。

7.根据权利要求1所述的组建EC条带的方法,其特征在于,所述根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带,包括:获取打散到所述每个数据处理模块的数据块;

根据所述每个待组建EC条带的列组合和所述打散到所述每个数据处理模块的数据块,组建所述每个待组建EC条带。

8.一种存储节点,其特征在于,应用于分布式存储系统,所述分布式存储系统中部署有N个数据处理模块,N≥2,N是整数;所述N个数据处理模块用于管理分区中的数据块;所述存储节点包括:

存储器,用于存储计算机程序;

处理器,用于调用所述计算机程序,以实现以下功能:获取所述N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息;

根据所述每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合;其中,所述待组建EC条带集合包括N列数据块,所述N个数据处理模块中的一个数据处理模块用于管理所述N列数据块中的一列数据块,任意两个所述待组建EC条带的列组合不同;所述待组建EC条带的列组合是所述待组建EC条带包括的数据块所在的列构成的集合,管理同一所述待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同;

根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带。

9.根据权利要求8所述的存储节点,其特征在于,所述分区包含一个或多个EC条带;所述根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带,包括:在所述一个或多个EC条带中获取K个EC条带;K≥1,所述K是整数;

将所述K个EC条带中的有效数据块进行重建,得到所述每个待组建EC条带;其中,所述K个EC条带中的有效数据块的个数与所述待组建EC条带集合中的数据块的个数相等,且所述重建前后参与所述重建的有效数据块所在的列相同。

10.根据权利要求9所述的存储节点,其特征在于,所述在所述一个或多个EC条带中获取K个EC条带,包括:

根据动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带;其中,所述动态规划算法使得所述K个EC条带中的有效数据块重建后得到所述每个待组建EC条带。

11.根据权利要求10所述的存储节点,其特征在于,所述根据动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带,包括:获取所述一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组合;

根据所述各EC条带中有效数据块所在的列构成的列组合、所述每个待组建EC条带的列组合和所述动态规划算法,在所述一个或多个EC条带中获取所述K个EC条带。

12.根据权利要求11所述的存储节点,其特征在于,所述动态规划算法使得所述一个或多个EC条带中参与所述重建的EC条带的个数最大。

13.根据权利要求9至12任一项所述的存储节点,其特征在于,所述存储器还用于,同时存储所述每个待组建EC条带的条带信息,其中,所述待组建EC条带的条带信息包括所述待组建EC条带包括的数据块的信息和校验块的信息。

14.根据权利要求9所述的存储节点,其特征在于,所述根据所述每个待组建EC条带的列组合,组建所述每个待组建EC条带,包括:获取打散到所述每个数据处理模块的数据块;

根据所述每个待组建EC条带的列组合和所述打散到所述每个数据处理模块的数据块,组建所述每个待组建EC条带。

15.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在至少一个存储节点上运行时,所述至少一个存储节点执行权利要求1至7中任一项所述的组建纠删码EC条带的方法。

说明书 :

组建EC条带的方法和装置

技术领域

[0001] 本申请实施例涉及数据处理技术领域,尤其涉及组建纠删码(erasure coding,EC)条带的方法和装置。

背景技术

[0002] 在分布式存储系统中,为了保证数据的可靠性,业界提出了EC条带存储技术。具体的:将K个数据块进行编码(或校验)生成M个校验块,该K个数据块和该M个数据块构成一个
EC条带;然后存储该K个数据块和该M个校验块。其中,数据块是分布式存储系统中存储数据
的基本单位;K≥1,M≥1,K和M均是整数。当K个数据块的其中一个或多个数据块丢失时,利
用M个校验块可以重新计算得到丢失的数据块,从而保证数据的可靠性。
[0003] 在EC条带包含的数据块的个数一定的情况下,该EC条带所包含的校验块的个数越多,数据的可靠性越高。但是,这会使得存储冗余数据(即校验块)所占用的存储空间越大。
因此,如何组建EC条带,从而提高分布式存储系统的整体性能,成为亟待解决的技术问题。

发明内容

[0004] 本申请实施例提供了组建EC条带的方法和装置,有助于提高分布式存储系统的整体性能。
[0005] 第一方面,本申请实施例提供了一种组建EC条带的方法,应用于分布式存储系统,分布式存储系统包括至少两个存储节点,至少两个存储节点上部署有N个数据处理模块,N
≥2,N是整数;该N个数据处理模块用于管理一个分区中的数据块。该方法包括:获取该N个
数据处理模块中的每个数据处理模块所在的存储节点的标识信息;根据每个数据处理模块
所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合;其
中,待组建EC条带集合包括N列数据块,该N个数据处理模块中的一个数据处理模块用于管
理N列数据块中的一列数据块,任意两个待组建EC条带的列组合不同;待组建EC条带的列组
合是待组建EC条带包括的数据块所在的列构成的集合,管理同一待组建EC条带的任意两列
数据块的数据处理模块所在的存储节点不同;根据每个待组建EC条带的列组合,组建每个
待组建EC条带。本技术方案中,基于“管理同一待组建EC条带的任意两列数据块的数据处理
模块所在的存储节点不同”这一原则组建EC条带。这样,当待组建EC条带集合包括M列校验
块时,在保证数据块的可靠性的同时,可以允许M个存储节点故障。与现有技术相比,有助于
减小冗余数据所占的存储空间,从而提高分布式存储系统的整体性能。
[0006] 需要说明的是,本申请实施例中的“组建”可以包括新建或重建。当组建具体是新建时,本申请实施例提供的技术方案的执行主体可以是分布存储系统中的EC管理模块或客
户端。当组建具体是重建时,本申请实施例提供的技术方案的执行主体可以是分布存储系
统中的EC管理模块。其中,EC管理模块具体是与上述分区存在映射关系的EC管理模块。
[0007] 在一种可能的设计中,该分区包含一个或多个EC条带;根据每个待组建EC条带的列组合,组建每个待组建EC条带,包括:在一个或多个EC条带中获取K个EC条带;K≥1,K是整
数;将K个EC条带中的有效数据块进行重建,得到每个待组建EC条带;其中,K个EC条带中的
有效数据块的个数与待组建EC条带集合中的数据块的个数相等,且重建前后参与重建的有
效数据块所在的列相同。该可能的设计中,组建EC条带具体是指重建EC条带。
[0008] 在一种可能的设计中,在一个或多个EC条带中获取K个EC条带,包括:根据动态规划算法,在一个或多个EC条带中获取K个EC条带;其中,动态规划算法使得K个EC条带中的有
效数据块重建后得到每个待组建EC条带。
[0009] 在一种可能的设计中,根据动态规划算法,在一个或多个EC条带中获取K个EC条带,包括:获取一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组合;根据
各EC条带中有效数据块所在的列构成的列组合、每个待组建EC条件的列组合和动态规划算
法,在一个或多个EC条带中获取K个EC条带。该可能的设计提供了根据动态规划算法获得该
K个EC条带的一种具体实现方式,当然本申请实施例不限于此。
[0010] 在一种可能的设计中,动态规划算法使得一个或多个EC条带中参与重建的EC条带的个数最大。这样,有助于释放更多的旧EC条带,从而有助于降低存储开销。
[0011] 在一种可能的设计中,在将K个EC条带中的有效数据块进行重建,得到每个待组建EC条带之后,该方法还包括:同时存储每个待组建EC条带的条带信息,其中,待组建EC条带
的条带信息包括待组建EC条带包括的数据块的信息和校验块的信息。也就是说,待组建EC
条带集合中的每个待组建EC条带同时生效,这样,可以降低存储开销。
[0012] 在一种可能的设计中,根据每个待组建EC条带的列组合,组建每个待组建EC条带,包括:获取打散到每个数据处理模块的数据块;根据每个待组建EC条带的列组合和打散到
每个数据处理模块的数据块,组建每个待组建EC条带。该可能的设计中,组建EC条带具体是
指新建EC条带。
[0013] 第二方面,本申请实施例提供了组建EC条带的装置,该装置可以用于执行上述第一方面或第一方面提供的任一种方法。可选的,该装置可以是上述第一方面中的客户端或
EC管理模块。可选的,该装置可以是部署有上述第一方面中的客户端或EC管理模块的存储
节点。
[0014] 在一种可能的设计中,可以根据上述第一方面提供的方法对该装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成
在一个处理模块中。
[0015] 在一种可能的设计中,该装置具体是包含上述第第一方面中的客户端或EC管理模块。该存储节点包括存储器和处理器,存储器用于存储计算机程序。处理器用于调用该计算
机程序,以实现客户端或EC管理模块的功能。关于客户端或EC管理模块的功能可以参考上
述第一方面。
[0016] 本申请实施例还提供了一种处理装置,用以实现上述第二方面或第二方面的任一种可能的实现方式提供的组建EC条带的装置的功能,该处理装置包括处理器和接口;处理
装置可以是一个芯片,处理器可以通过硬件来实现也可以通过软件来实现,当通过硬件实
现时,该处理器可以是逻辑电路、集成电路等;当通过软件来实现时,该处理器可以是一个
通用处理器,通过读取存储器中存储的软件代码来实现,该存储器可以集成在处理器中,可
以位于处理器之外,独立存在。
[0017] 本申请实施例还提供了一种计算机可读存储介质,如计算机非瞬态的可读存储介质。其上储存有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述第一
方面的任一种可能的方法。例如,该计算机可以是至少一个存储节点。
[0018] 本申请实施例还提供了一种计算机程序产品,当其在计算机上运行时,使得第一方面提供的任一方法被执行。例如,该计算机可以是至少一个存储节点。
[0019] 可以理解的,上述提供的任一种方法或装置或计算机存储介质或计算机程序产品等均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法
中的有益效果,此处不再赘述。

附图说明

[0020] 图1为本申请实施例提供的一种分布式存储系统的架构示意图;
[0021] 图2为本申请实施例提供的另一种分布式存储系统的架构示意图;
[0022] 图3为本申请实施例提供的另一种分布式存储系统的架构示意图;
[0023] 图4为本申请实施例提供的一种分区、列和EC条带之间的对应关系的示意图;
[0024] 图5为本申请实施例提供的一种新建EC条带的过程示意图;
[0025] 图6为本申请实施例提供的一种重建EC条带的过程示意图;
[0026] 图7为现有技术提供的一种重建EC条带的过程示意图;
[0027] 图8为本申请实施例提供的一种组建EC条带的方法的流程示意图;
[0028] 图9为本申请实施例提供的一种待组建EC条带集合的示意图;
[0029] 图10A为本申请实施例提供的另一种组建EC条带的方法的流程示意图;
[0030] 图10B为本申请实施例提供的另一种组建EC条带的方法的流程示意图;
[0031] 图11为本申请实施例提供的另一种组建EC条带的方法的流程示意图;
[0032] 图12为现有技术提供的方法和本申请实施例提供的方法的对比示意图;
[0033] 图13A为本申请实施例提供的一种重建EC条带的过程示意图;
[0034] 图13B为本申请实施例提供的另一种重建EC条带的过程示意图;
[0035] 图13C为本申请实施例提供的另一种重建EC条带的过程示意图;
[0036] 图14为本申请实施例提供的一种组建EC条带的装置的示意图;
[0037] 图15为本申请实施例提供的另一种组建EC条带的装置的示意图。

具体实施方式

[0038] 在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/
或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。并且,在本申请的描述
中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的
技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相
同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执
行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
[0039] 如图1所示,是本申请实施例提供的一种分布式存储系统的架构示意图。在图1中,分布式存储系统可以包括交换机21,以及至少一个存储节点22,各存储节点22之间通过交
换机21连通。其中,交换机21可以例如但不限于是以太网交换机(ethernet switch),IB交
换机(infiniband switch),PCIe交换机(PCIe switch)等。可以理解的,图1所示的分布式
存储系统仅为一个示例,实际实现时,多个存储节点之间也可以直接进行通信,或通过其他
设备进行通信,本申请对此不进行限定。
[0040] 存储节点22,是分布式存储系统中提供IO处理能力与存储空间的部件。存储节点22可以为计算设备,例如存储服务器。
[0041] 可选的,存储节点22可以包括:通信接口220、执行模块221,以及与执行模块221连接的一个或多个存储模块222。通信接口220与执行模块221之间,执行模块221与存储模块
222之间均可以通过通信线路连接。其中,通信线路可以包括一通路,用于在上述组件之间
传送信息。通信线路也可以称为I/O总线,具体可以例如但不限于是快速外部设备互连总线
(peripheral component interconnect express,PCIe)等。
[0042] 通信接口220,可以是任何收发器一类的装置,用于与其他设备或通信网络(例如,以太网,无线局域网(wireless local area networks,WLAN)等)通信。
[0043] 执行模块221,负责IO操作(包括读/写操作)的输入输出以及相关处理流程的执行。执行模块221可以包括:至少一个处理器。至少一个处理器还可以连接一定数量的内存。
[0044] 其中,处理器,可以是一个通用中央处理器(central processing unit,CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),现场可
编程门阵列FPGA(field-programmable gate array,FPGA),或一个或多个用于控制本申请
方案程序执行的集成电路。通信接口220与处理器之间可以通过通信线路连接。应注意,在
物理实现上,此处的处理器、通信线路、与通信接口中的部分或全部可以集成在一起,当然,
也可以独立设置,本申请对此不进行限定。其中,内存可以用于存储执行本申请方案的计算
机程序,并由处理器来控制执行。处理器用于执行存储器中存储的计算机程序,从而实现本
申请下述实施例提供的方法。可选的,本申请实施例中的计算机程序也可以称之为应用程
序代码,或者计算机执行指令等,本申请实施例对此不作具体限定。
[0045] 存储模块222,可以包括至少一个存储控制器,以及每一存储控制器连接的多个存储芯片。其中,存储芯片可以是NandFlash芯片,也可以是其他的非易失的存储芯片,如相变
存储器(phase change memory,PCM)、磁阻式随机访问存储器(magnetic random access 
memory,MRAM)、阻变式存储器(resistive random access memory,RRAM)。存储控制器可以
是ASIC芯片,也可以是FPGA。此处的存储模块222的物理形态可以是固态硬盘(solid state 
drives,SSD),也可以是磁盘(hard disk drive,HDD)等,本申请对此不进行限定。
[0046] 可选的,分布式存储系统中还可以设置有如下模块:客户端(也可以称为客户端进程)31、一个或多个EC管理模块32、与EC管理模块32存在映射关系的多个数据处理模块33。
另外,分布式存储系统中还可以设置有视图管理模块34。
[0047] 具体实现的过程中,客户端31、EC管理模块32、数据处理模块33和视图管理模块34中的部分或全部可以以计算机程序的形式存储于存储器(例如图1中的内存)中。处理器(例
如图1中的CPU)可以调用该计算机程序,从而实现客户端31、EC管理模块32、数据处理模块
33和视图管理模块34中的至少一种所执行的功能。其示意图,如图2所示。
[0048] 具体实现的过程中,客户端31、EC管理模块32、数据处理模块33和视图管理模块34中的任一模块可以独立部署在一个存储节点22上,或者任意多个模块可以部署在同一个存
储节点22上。如图3所示,为本申请实施例提供的另一种分布式存储系统的架构示意图。为
了简洁,图3中并未示出存储节点22中的通信接口、处理器、通信线路、存储模块等。
[0049] 分布式存储系统中设置至少两个分区(partition,PT),分区是IO操作的数据块构成的集合。IO操作包括写操作或读操作。写操作携带逻辑区块地址(logical  block 
address,LBA)和待写数据,该待写数据包括一个或多个数据块。在本申请实施例中,IO操作
具体是写操作。需要说明的是,本申请实施例中涉及“分区包括的EC条带”。一个分区包括的
EC条带,具体是指该分区中包括的数据块组建得到的EC条带。
[0050] 作为一个示例,一个分区与如下模块存在映射关系:一个EC管理模块32,与该EC管理模块32存在映射关系的多个数据处理模块33,如图3所示。图3中的虚线框表示一个分区
对应的EC管理模块32和数据处理模块33。为了便于描述,本文中,将与一个分区存在映射关
系的数据处理模块33所管理的数据块称为该分区中的数据块。
[0051] 以下基于图3介绍分布式存储系统中部署的各模块的部分功能。
[0052] 客户端31,用于接收一个或多个IO操作,并按照打散规则将该一个或多个IO操作携带的数据块打散到数据处理模块33。基于该打散规则,携带同一LBA的IO操作会被打散到
同一个数据处理模块33。具体包括:对于一个数据块来说,先将该数据块打散到某个分区,
再打散到与该分区存在映射关系某个数据处理模块33。
[0053] EC管理模块32,例如可以是EC服务器(EC-server),用于管理打散到与该EC管理模块32存在映射关系的分区中的数据块的EC条带信息。EC条带信息可以包括:EC条带包括哪
些数据块和校验块、EC条带中的数据块的写入情况、EC条带中的数据块的有效状态等。数据
块的写入情况是指EC条带的列组合;数据块的有效状态是指数据块是有效数据块还是无效
数据块。关于EC条带、EC条带的列组合、有效数据块和无效数据块的描述可参考下文。
[0054] 数据处理模块33,例如可以是资源卷(resource volume,RV),用于管理打散到该数据处理模块33的数据块,或者,用于管理校验块。
[0055] 视图管理模块34,用于管理分布式存储系统的视图信息。视图信息可以包括但不限于以下至少一种信息:分区总数、分区与EC管理模块32之间的映射关系、分区与数据处理
模块33之间的映射关系、EC管理模块32与数据处理模块33之间的映射关系、模块(包括客户
端31、EC管理模块32、数据处理模块33和视图管理模块34)与该模块所在的存储节点之间的
映射关系等。另外,视图管理模块34还可以用于向客户端31或EC管理模块推送视图信息。例
如,视图管理模块34可以在视图管理模块34所管理的视图信息更新后,将更新后的视图信
息同步到客户端31;以及,在客户端31启动后,将视图管理模块34所管理的部分或全部视图
信息同步到客户端31;其中,这里的客户端31可以替换为EC管理模块32,从而实现视图管理
模块34向EC管理模块32推送视图信息。
[0056] 通常,在执行组建EC条带之前,需要搭建分布式存储系统,具体的,根据配置文件在分布式存储系统的存储节点上部署客户端31、EC管理模块32、数据处理模块33和视图管
理模块34等。其中,配置文件可以用于记录:分布式存储系统中的分区总数,与每个分区存
在映射关系的EC管理模块32、数据处理模块33的个数,分配算法等。其中,分配算法可以用
于视图管理模块34建立每个模块(包括客户端31、EC管理模块32、数据处理模块33和视图管
理模块34等)与该模块所在的存储节点之间建立映射关系等。
[0057] 可以理解的,图3所示的分布式存储系统仅为一个示例,其不构成对本申请提供的分布式存储系统的限定。例如,分布式存储系统中可以包括一个或多个客户端31。例如,每
个分区可以与一个或多个EC管理模块33存在映射关系等。
[0058] 上述任一模块(如客户端31、EC管理模块32、数据处理模块33和视图管理模块34等)可以由一个设备实现,也可以由多个设备共同实现,还可以是一个设备内的一个功能模
块,本申请实施例对此不作具体限定。可以理解的是,上述功能既可以是硬件设备中的网络
元件,也可以是在专用硬件上运行的软件功能,或者是平台(例如云平台)上实例化的虚拟
化功能。作为一个示例,用于实现上述任一模块的设备的结构示意图可以如图1中所示的存
储节点。
[0059] 一个分区包括N列数据块和M列校验块,N≥1,M≥1,N和M均是整数。与该分区存在映射关系的一个数据处理模块用于管理该N列数据的其中一列数据块,或者用于管理该M列
校验块的其中一列校验块。EC条带是同一分区包括的分别由不同数据处理模块管理的至少
一个数据块和至少一个校验块组成的集合;也就是说,对于一个EC条带来说,一个数据处理
模块用于管理该EC条带中的一个数据块或一个校验块。对于一个数据处理模块来说,该数
据处理模块可以管理多个EC条带的属于同一列的数据块或校验块。
[0060] 如图4所示,为本申请实施例提供的一种分区、列和EC条带之间的对应关系的示意图。在图4中,一个分区包括3列数据块和2列校验块。将与该分区存在映射关系的数据处理
模块分别标记为数据处理模块1~5,其中,数据处理模块1~3用于管理数据块,数据处理模
块4~5用于管理校验块。数据处理模块1~3中的一个小方格表示一个数据块,数据处理模
块4~5中的一个小方格表示一个校验块。图4中虚线框中的数据块和校验块构成一个EC条
带。
[0061] 目前,新建EC条带的方法包括如下步骤:
[0062] 步骤11:客户端获取视图信息。该视图信息包括分区与EC管理模块之间的映射关系,分区与数据处理模块之间的映射关系,以及数据处理模块与该数据处理模块所在的存
储节点之间的映射关系等。
[0063] 步骤12:客户端接收一个或多个IO操作,并按照打散规则将该一个或多个IO操作携带的数据块打散到数据处理模块。具体可以包括:先将一个或多个IO操作携带的数据块
打散到分区,再根据分区与数据处理模块之间的映射关系,将打散到一个分区的数据块继
续打散到与该分区存在映射关系的数据处理模块。
[0064] 步骤13:对于任一目标分区(即包含数据块的分区)来说,客户端根据分区与EC管理模块之间的映射关系,向与目标分区存在映射关系的目标EC管理模块发送请求消息,以
请求空闲EC条带,即请求待组建EC条带的数据块和校验块的物理存储空间信息。
[0065] 空闲EC条带,是所包括的各数据块和各校验块所占的物理存储空间已确定,且这些物理存储空间中还未存储任一数据块和任一校验块的EC条带。空闲EC条带由EC管理模块
生成。物理存储空间信息,是指用于指示物理存储空间的物理存储空间的信息,如物理存储
空间的地址等。
[0066] 例如,结合图4,EC管理模块可以确定EC条带1包括的3个数据块和2个校验块的物理存储空间分别是物理存储空间11、12、13、14、15,以及EC条带2包括的3个数据块和2个校
验块的物理存储空间分别是物理存储空间21、22、23、24、25。如果这些物理存储空间中均没
有存储数据,则EC条带1和EC条带2均是空闲EC条带。
[0067] 步骤14:对于每个待组建EC条带来说,客户端根据该待组建EC条带的物理存储空间信息,向该待组建EC条带中的每个数据块的物理存储空间中存储数据块,并向该待组建
EC条带中的每个校验块的物理存储空间中存储校验块。校验块是所存储的数据块经校验得
到的。
[0068] 例如,结合步骤13中的示例,假设空闲EC条带是EC条带1,则客户端向物理存储空间11、12、13中分别写入数据块,并向物理存储空间14、15中分别写入校验块。
[0069] 需要说明的是,具体实现的过程中,由于客户端接收到的IO操作具有随机性,因此对于同一个分区来说,打散到与该分区存在映射关系的不同数据处理模块的数据块的数量
可能不同,即可能存在与该分区存在映射关系的部分数据处理模块没有被分配(即打散)数
据块。此时,客户端可以作短时间等待,即等待与该分区存在映射关系的所有数据处理模块
都具有所管理的数据块时,根据该所有数据处理模块所管理的数据块计算校验块,从而组
建EC条带。如果等待超时,客户端可以选择缺列组合,但是客户端需要记录缺列信息。其中,
这里的缺列信息,是指对于某个EC条带来说,因没有数据块被写到所分配的物理存储空间
中而记录的缺列信息。
[0070] 如图5所示,为本申请实施例提供的一种新建EC条带的过程示意图。图5中,数据处理模块1~3用于管理数据块,数据处理模块4~5用于管理校验块。图5中虚线框中的数据块
和校验块构成一个EC条带。携带有“不写”字样的小方格表示不写数据块。由图5可知,EC条
带1包括数据块D1、D2、D3以及校验块P1、Q1。EC条带2包括数据块D4以及校验块P2、Q2。其中,
EC条带2的缺列信息可以是第1列和第3列中不写数据块。
[0071] 具体实现的过程中,分布式存储系统中还可以存储每个数据块的索引记录。其中,数据块的索引记录用于标识该数据块。
[0072] 在分布式存储系统中,随着数据的写入,后写入的数据块(即旧数据块)可能会被新写入的数据块(即新数据块)覆盖。以应用于写重定向(redirect on write,ROW)场景下,
旧数据块被覆盖包括:将旧数据块的索引记录替换为新数据块的索引记录,然后在新物理
存储空间中写入该新数据块。这会导致旧数据块变成垃圾(即无效数据块)。为了提高空间
利用率,可以对无效数据块进行回收。一种无效数据块回收方法是EC条带重建,具体的:将
一个或多个原有的EC条带(即旧EC条带)上的有效数据块重建成新EC条带,并释放该一个或
多个旧EC条带。
[0073] 可以理解的,若一个EC条带包含无效数据块,则该EC条带所包含的校验块无效。另外,通常对于参与重建EC条带的每个有效数据块来说,重建前后该有效数据块所属的列不
变,也就是说,管理该有效数据块的数据处理模块不变。
[0074] 如图6所示,为本申请实施例提供的一种重建EC条带的过程示意图。在图6中,旧EC条带是EC条带1和EC条带2,且EC条带1包括数据块D1~D3和校验块P1、Q1,EC条带2包括数据
块D6~D8和校验块P2、Q2。EC条带1中的数据块D2为无效数据块,EC条带2中的数据块D6和D8
为无效数据块。校验块P1、Q1、P2、Q2均无效。EC条带1和EC条带2经重建得到新EC条带(标记
为EC条带3)。EC条带3包括EC条带1、2中的数据块D1、D3和D7,以及数据块D1、D3和D7经校验
得到的检验块P3、Q3。
[0075] 目前,一种重建EC条带的方法包括:将不同EC条带上的有效数据挂入哈希表,然后类似新建EC条带的方式组建EC条带。这样,同一个EC条带的不同有效数据块可能出现在不
同的EC条带上。如果旧EC条带上的一部分有效数据块已经生成新EC条带,另外一部分有效
数据尚未生成新EC条带,则可能因尚未生成新EC条带的数据块“咬”住旧EC条带,而导致旧
EC条带不能释放,从而浪费存储空间。并且,如果此时出现异常恢复,则旧EC条带上的已经
生成新EC条带的有效数据块会存在于新旧两个不同EC条带中,无法判断新旧,因此,需要既
存储新EC条带又存储旧EC条带,从而浪费存储空间。
[0076] 如图7所示,为现有技术提供的一种重建EC条带的过程示意图。其中,与图6不同的是,图7中的EC条带2中的数据块D8是有效数据块。基于此可知,尚未生成新EC条带的有效数
据块D8会“咬”住旧EC条带(具体是EC条带2),使得EC条带2不能释放。并且,如果此时出现异
常恢复,则EC条带2上的已经生成新EC条带的有效数据块D7会存在于EC条带2和EC条带3上。
[0077] 以下,结合附图对本申请提供的组建EC条带的方法进行说明。
[0078] 如图8所示,为本申请实施例提供的一种组建EC条带的方法的流程示意图。图8所示的方法应用于分布式存储系统,该分布式存储系统包括至少两个存储节点,该至少两个
存储节点上部署有N个数据处理模块,N≥2,N是整数。例如,该分布式存储系统可以如图2所
示。该N个数据处理模块用于管理一个分区中的数据块。图8所示的方法可以包括如下步骤:
[0079] S101:获取N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息。
[0080] 该N个数据处理模块用于管理目标分区中的数据块,其中,目标分区可以是分布式存储系统中设置的任一分区。也就是说,该N个数据处理模块是与目标分区存在映射关系的
数据处理模块。可选的,该N个数据处理模块是与目标分区存在映射关系的所有数据处理模
块。作为一个示例,结合图4,该N个数据处理模块可以是图4中的数据处理模块1~3。
[0081] 本实施例的执行主体可以是客户端或与目标分区存在映射关系的EC管理模块。根据上文可知,视图管理模块可以在搭建分布式存储系统时,向客户端和EC管理模块发送视
图信息;以及在视图信息更新之后,向客户端和EC管理模块发送更新后的视图信息。客户端
和EC管理模块可以管理(如存储或更新等)所接收到视图信息因此,执行S101时,客户端或
EC管理模块(具体是与目标分区存在映射关系的EC管理模块)可以在自身管理的视图信息
中获得N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息。
[0082] 需要说明的是,下文中所描述的视图信息均包括N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息,在此统一说明,下文不再赘述。
[0083] 本实施例可以应用于新建EC条带的场景中,也可以应用于重建EC条带的场景中。
[0084] 例如,应用于新建EC条带的场景时,客户端可以在接收到一个或多个IO操作,并将该一个或多个IO操作携带的数据块打散到数据处理模块之后,针对与目标分区存在映射关
系的数据处理模块,执行图7所示的组建条带的方法;或者,客户端可以在接收到一个或多
个IO操作,并将该一个或多个IO操作携带的数据块打散到数据处理模块,然后将打散到与
目标分区存在映射关系的数据处理模块的数据块,发送给与目标分区存在映射关系的EC管
理模块,从而由该EC管理模块执行图7所示的组建条带的方法。
[0085] 又如,应用于重建EC条带的场景时,EC管理模块可以在接收到视图管理模块发送的更新后的视图信息的情况下,执行图7所示的组建条带的方法。
[0086] S102:根据该每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合;其中,待组建EC条带集合包括N列数据块,N个数据处
理模块中的一个数据处理模块用于管理N列数据块中的一列数据块,任意两个待组建EC条
带的列组合不同;待组建EC条带的列组合是待组建EC条带包括的数据块所在的列构成的集
合,管理同一待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同。
[0087] N列数据块,具体可以是一个分区包含的N列数据块。例如,结合图4,N=3。
[0088] 待组建EC条带集合包括一个或多个待组建EC条带。每个待组建EC条带包括W个数据块,1≤W≤N。具体的,若EC条带集合包括一个待组建EC条带,则该待组建EC条带包括N个
数据块,即W=N。若EC条带集合包括多个待组建EC条带,则该多个待组建EC条带中的每个EC
条带包括的数据块的个数均小于N,即W<N。
[0089] 待组建EC条带的列组合,是待组建EC条带包括的数据块所在的列构成的集合。例如,若目标分区包括3列数据块(分别标记为列1~3),则:当待组建EC条带包括3个数据块
时,待组建EC条带的列组合是列1~3构成的集合;当待组建EC条带包括的2个数据块,且这2
个数据块所在的列分别是列1、3时,待组建EC条带的列组合是列1和列3构成的集合。
[0090] 管理同一待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同,可以理解为:部署在同一存储节点的多个数据处理模块不管理同一待组建EC条带中的两个
或两个以上的数据块。
[0091] 作为一个示例,S102可以包括:首先,根据该每个数据处理模块所在的存储节点的标识信息,获得哪些数据处理模块部署在同一个存储节点;然后,基于“管理同一待组建EC
条带的任意两列数据块的数据处理模块所在的存储节点不同”这一原则,穷举满足这一原
则的可能的列组合,从而获得待组建EC条带集合包含的各待创建EC条带的列组合,以及待
组建EC条带集合包括的待创建EC条带的个数。
[0092] 例如,假设目标分区包括3列数据块(分别标记为列1~3),即待组建EC条带集合包括3列数据块,且根据该每个数据处理模块所在的存储节点的标识信息,确定数据处理模块
1部署在存储节点1上,数据处理模块2、3部署在存储节点2上,则待组建EC条带集合包括2个
待组建EC条带,且其中一个待组建EC条带包括的数据块所在的列组合是列1、2构成的集合,
另一个待组建EC条带包括的数据块所在的列组合是列1、3构成的集合,如图9所示。另外,作
为对比,现有技术中,如果目标分区包括3列数据块,则该目标分区中的每个EC条带均包括3
列数据块,如图4所示。
[0093] S103:根据每个待组建EC条带的列组合,组建该每个待组建EC条带。换句话说,对于每个待组建EC条带,根据该待组建EC条带的列组合,组建该待组建EC条带。
[0094] 本申请实施例提供的组建EC条带的方法中,基于“管理同一待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同”这一原则组建EC条带。这样,当待组建EC
条带集合包括M列校验块时,在保证数据块的可靠性的同时,可以允许M个存储节点故障。与
现有技术相比,有助于减小冗余数据所占的存储空间,从而提高分布式存储系统的整体性
能。例如,结合S102中的示例,如果目标分区包括3列数据块,且数据处理模块2、3部署在存
储节点2上时,那么:当需要达到“保证数据块的可靠性且允许2个存储节点故障”这一要求
时,若按照本申请实施例提供的方法组建EC条带,需要2列校验块;而若按照现有技术提供
的方法组建EC条带,则需要3列或更多列校验块。由于校验块的数量越多,冗余数据所占的
存储空间越大,因此,本申请实施例有助于减小冗余数据所占的存储空间,从而提高分布式
存储系统的整体性能。或者说,结合S102中的示例,如果目标分区包括3列数据块,且数据处
理模块2、3部署在存储节点2上时,那么:当目标分区包含2列校验块时,按照本申请实施例
提供的方法组建EC条带,允许2个存储节点故障,因此本申请实施例能够在保证数据的可靠
性的情况下,不降低冗余级别,从而提高分布式存储系统的整体性能。
[0095] 在一种可选的实现方式中,S103可以包括:获取打散到每个数据处理模块的数据块;根据该每个待组建EC条带的列组合和打散到该每个数据处理模块的数据块,组建每个
待组建EC条带。该实现方式可应用于新建EC条带的场景,具体示例可参考图10A或图10B所
示的实施例。
[0096] 在另一种可选的实现方式中,S103可以包括:在目标分区包含的一个或多个EC条带中获取K个EC条带;K≥1,K是整数;将该K个EC条带中的有效数据块进行重建,得到该每个
待组建EC条带;其中,该K个EC条带中的有效数据块的个数与待组建EC条带集合中的数据块
的个数相等,且重建前后参与重建的有效数据块所在的列相同。也就是说,对于参数重建的
每个有效数据块来说,该有效数据块在重建前后所在的列不变。该实现方式可应用于重建
EC条带的场景中。具体示例可以参考图11所示的实施例。
[0097] 本申请实施例对如何获得该K个EC条带不进行限定。可选的,根据动态规划算法,在目标分区包含的一个或多个EC条带中获取该K个EC条带;动态规划算法使得该K个EC条带
中的有效数据块重建后得到该每个待组建EC条带。
[0098] 具体的,根据该一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组合、该每个待组建EC条件的列组合和动态规划算法,在该一个或多个EC条带中获取该K个
EC条带。例如,将“该一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组
合”和“该每个待组建EC条件的列组合”作为动态规划算法的自变量的取值,将“K个EC条带”
作为动态规划算法的因变量的取值,将“该K个EC条带中的有效数据块的个数与待组建EC条
带集合中的数据块的个数相等,且重建前后参与重建的有效数据块所在的列相同”作为动
态规划算法需要遵循的原则,从而实现在该一个或多个EC条带中获取该K个EC条带。
[0099] 其中,动态规划算法,用于求解具有某种最优性质的问题。其基本思想是将待求解问题分解成若干个子问题。动态规划算法不仅可以求出当前状态到目标状态的最优值,而
且还可以求出中间状态的最优值。
[0100] 为了便于说明,可以将上述N个数据管理模块所管理的列的编号标记为1~N,并且,对于一个列组合来说,如果该列组合包含第n列,则将第n列标记为“1”,否则将第n列标
记为“0”,1≤n≤N,n是整数。这样,可以通过二进制数表示出每个列组合。
[0101] 例如,若N=3,待组建EC条带集合包括待组建EC条带1、2,且待组建EC条带1的列组合是列1、2构成的集合,待组建EC条带2的列组合是列1、3构成的集合,则:待组建EC条带1的
列组合可以表示为“110”,待组建EC条带2的列组合可以表示为“101”。
[0102] 以下,基于该示例说明可使用动态规划算法获取该K个EC条带,从而重建得到待组建EC条带集合中的每个待组建EC条带。
[0103] 各待组建EC条带的列组合构成的集合可以表示为:A={110,101}。
[0104] 集合A中的各元素之和可以表示为:V=110+101=211。下文中将“211”称为目标值。
[0105] 目标分区中可能包含的EC条带的有效数据所在列的列组合构成的集合可以表示为:U={100,010,001,110,101,011,111}。目标分区中实际包含的EC条带的有效数据所在
列的列组合构成的集合是集合U的一个子集或是集合U本身。
[0106] 集合U中除A的补集可以表示为:CUA={100,010,001,011,111}。
[0107] 以目标分区中实际包含的EC条带的有效数据所在列的列组合是集合U为例,在目标分区包含的一个或多个EC条带中获取K个EC条带,具体可以体现为:在集合U中或者集合
CUA中找到K个元素,这K个元素相加得到的值为目标值即“211”。下文中是以在集合CUA中找
到K个元素为例进行说明的。
[0108] 由于011+200=211,因此,为了获得目标值“211”可以先获得“011”和“200”。由于“011”可以通过CUA中的元素“010”和“001”求和得到,且“200”可以通过CUA中的元素“100”和
“100”求和得到。也就是说,CUA中的元素“010”、“001”“100”和“100”求和可以得到目标值
“211”。因此,可以将目标分区中的“第1、3列上的数据块是无效数据块、且第2列上的数据块
是有效数据块”的1个EC条带、“第1、2列上的数据块是无效数据块、且第3列上的数据块是有
效数据块”的1个EC条带,以及“第1列上的数据块是有效数据块、且第2、3列上的数据块是无
效数据块”的2个EC条带,作为所获取到的K个EC条带,此时,K=4。
[0109] 基于该示例,应用动态规划算法时,可以认为待求解问题是:需要获得目标值“211”,将待求解问题分解为若干个子问题,具体是将需要获得目标值“211”分解为需要获
得“011”这一子问题和需要获得“200”这一子问题。由此可知,本申请实施例中,可以使用动
态规划算法获取K个EC条带,从而重建得到待组建EC条带集合中的每个待组建EC条带。
[0110] 具体实现时,由于目标分区实际包含的EC条带的有效数据所在列的列组合构成的集合可能是集合U的一个子集,因此,可能出现目标分区实际包含的EC条带不能重建得到待
组建EC条带集合中的每个待组建EC条带。该情况下,由于随着分布式存储系统中的数据的
写入,可能会出现目标分区实际包含的EC条带中存在能够重建待组建EC条带集合中的每个
待组建EC条带,因此,可以等待一段时间,再获取该K个EC条带。
[0111] 可选的,动态规划算法用于求解具有某种最优性质的问题,基于此,应用于本申请实施例时,这里的“最优”可以是动态规划算法使得目标分区中已经存在(即目标分区实际
包含)的EC条带中,参与重建的EC条带的个数最大。例如,基于上述示例可知通过CUA中的元
素“010”、“001”、“100”和“100”求和可以得到目标值“211”,此时K=4,下文中将该方案称为
方案1。另外,通过CUA中的元素“011”、“100”和“100”求和也可以得到目标值“211”,此时K=
3,下文中将该方案称为方案2。对比方案1、2可知,使用方案1执行重建EC条带之后,可以释
放更多的旧EC条带,这有助于降低存储开销。因此,“动态规划算法使得目标分区中已存在
的EC条带中,参与重建的EC条带的个数最大”有助于降低存储开销。
[0112] 可以理解的,实际实现时,可以通过设置动态规划算法的参数,使得动态规划算法所输出的结果是能够解决待求解问题的多种可能的方案。应用于本申请实施例时,可以通
过设置动态规划算法的参数,使得动态规划算法输出多组EC条带,后续,EC管理模块可以在
这多组EC条带中选择一组EC条带,从而执行重建EC条带。其中,每组EC条带中的有效数据块
可以重建得到待组建EC条带集合中的每个待组建EC条带。其中,一组EC条带可以认为是该K
个EC条带的一种可能的组合。不同组EC条带中包含的EC条带的个数可以相同,也可以不相
同。例如,基于上文中的示例,可以通过设置动态规划算法的参数,使得动态规划算法所输
出的结果包括:“010、001、100和100”,以及“011、100和100”。
[0113] 以下通过具体的示例,对上述图8所示的组建EC条带的方法进行说明。其中,图10A和图10B是以图8所示的方法应用于新建EC条带的场景中为例进行说明,具体的,图10A是是
由客户端执行新建EC条带,图10B是由EC管理模块执行新建EC条带。图11是以图8所示的方
法应用于重建EC条带的场景中为例进行说明。
[0114] 图10A、图10B或图11所示的方法均应用于分布式存储系统,该分布式存储系统包括至少两个存储节点,该至少两个存储节点上部署有N个数据处理模块,N≥2,N是整数。该N
个数据处理模块用于管理一个分区中的数据块。另外,图10A、图10B或图11所示的方法中相
关内容的解释或具体实现方式均可以参考上文。在此统一说明,下文不再赘述。
[0115] 如图10A所示,为本申请实施例提供的一种组建EC条带的方法的流程示意图。图10A所示的方法可以包括如下步骤:
[0116] S201:目标EC管理模块获取与目标分区存在映射关系的N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息。目标分区可以是分布式存储系统中设置的任
一分区。目标EC管理模块与目标分区之间存在映射关系。
[0117] 例如,假设至少两个分区包括分区1和分区2,则分区、用于管理数据块的数据处理模块、以及这些数据处理模块所在的存储节点之间的的对应关系可以如表1所示。
[0118] 表1
[0119]
[0120] 基于表1,假设目标分区是分区1,则S201中的N个数据处理模块具体是数据处理模块11~13,执行S201之后,可以得到数据处理模块11所在的存储节点是存储节点1,数据处
理模块12、13所在的存储节点是存储节点2。
[0121] S202:目标EC管理模块根据该每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合。待组建EC条带集合包括N列数据块,
N个数据处理模块中的一个数据处理模块用于管理N列数据块中的一列数据块,任意两个待
组建EC条带的列组合不同,管理同一待组建EC条带的任意两列数据块的数据处理模块所在
的存储节点不同。
[0122] 例如,基于表1可知N=3,因此待组建EC条带集合包括3列数据块。如果将该3列数据块分别标记为列1~3,则待组建EC条带集合包括的待组建EC条带以及每个待组建EC条带
的列组合之间的对应关系可以如表2所示:
[0123] 表2
[0124]
[0125] S203:对于每个待组建EC条带,目标EC管理模块根据该待组建EC条带的列组合,为该待组建EC条带包括的各数据块和校验块分配物理存储空间。
[0126] 例如,以目标分区包含的校验块所在的列是列4、列5为例,基于表2,每个待组建EC条带所包含的数据块和校验块的物理存储空间之间的对应关系可以如表3所示:
[0127] 表3
[0128]
[0129] S204:客户端接收一个或多个IO操作,将该一个或多个IO操作携带的数据块打散到分布式存储系统中部署的数据处理模块。
[0130] 例如,假设目标分区是分区1,则与目标分区存在映射关系的数据处理模块,与打散到各各数据处理模块上的数据块之间的对应关系可以如表4所示:
[0131] 表4
[0132]数据处理模块 数据块
数据处理模块11 数据块D1
数据处理模块12 数据块D2、D3
数据处理模块13 数据块D4
[0133] S205:客户端获取与目标分区存在映射关系的N个数据处理模块中的每个数据处理模块所在的存储节点的标识信息。具体示例可以参考上述S201。
[0134] S206:客户端根据该每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合。具体示例可以参考上述S202。
[0135] S207:客户端向目标EC管理模块发送请求消息,该请求消息用于请求每个待组建EC条带的数据块和校验块的物理存储空间信息。
[0136] 本申请实施例对S201~S203和S204~S207的先后顺序不进行限定,例如,可以先执行S201~S203再执行S204~S207,或者先执行S204~S207再执行S201~S203,或者同时
执行S201~S203和S204~S207,或者在执行S201~S203的过程中执行S204~S207中的部分
步骤,或者在执行S204~S207的过程中执行S201~S203中的部分步骤。
[0137] S208:目标EC管理模块根据该请求消息,向客户端发送每个待组建EC条带的数据块和校验块的物理存储空间信息。
[0138] S209:客户端根据打散到与目标分区存在映射关系的数据处理模块的数据块,以及每个待组建EC条带的列组合,确定每个待组建EC条带包括的数据块,以及每个待组建EC
条带包括的数据块经校验得到的校验块。
[0139] 例如,以目标分区包含的校验块所在的列是列4、5为例,基于表3和表4,每个待组建EC条带包括的数据块,以及每个待组建EC条带包括的数据块可以如表5所示:
[0140] 表5
[0141]
[0142] 其中,校验块P1、Q1是数据块D1、D2经校验得到的校验块。校验块P2、Q2是数据块D4经校验得到的校验块。
[0143] S210:对于每个待组建EC条带,客户端根据该待组建EC条带所包含的数据块的物理存储空间信息,向相应的物理存储空间中写入数据块,并根据该待组建EC条带所包含的
校验块的物理存储空间信息,向相应物理存储空间中写入校验块。
[0144] 例如,基于表4和表5,客户端将数据块D1、D2、校验块P1、Q1依次写入物理存储空间11~14,且将数据块D4、校验块P2、Q2依次写入物理存储空间22~24。
[0145] S211:客户端向目标EC管理模块发送每个待组建EC条带的条带信息。其中,一个待组建EC条带的条带信息包括该待组建EC条带包括的数据块的信息(如数据块的标识信息
等)和校验块的信息(如校验块的标识信息)等。
[0146] S212:目标EC管理模块存储该每个待组建EC条带的条带信息。至此,每个待组建EC条带组建完成。
[0147] 本实施例的有益效果可以参考图8所示的实施例的有益效果,此处不再赘述。
[0148] 如图10B所示,为本申请实施例提供的一种组建EC条带的方法的流程示意图。图10B所示的方法可以包括如下步骤:
[0149] S301~S304:可以参考上述S201~S204。
[0150] S305:客户端向目标EC管理模块发送打散到上述N个数据处理模块(即与目标EC管理模块存在映射关系的N个数据处理模块)的数据块。
[0151] S306:目标EC管理模块根据打散到与目标分区存在映射关系的数据处理模块的数据块,以及每个待组建EC条带的列组合,确定每个待组建EC条带包括的数据块,以及每个待
组建EC条带包括的数据块经校验得到的校验块。具体示例可以参考上述S209。
[0152] S307:对于每个待组建EC条带,目标EC管理模块根据该待组建EC条带所包含的数据块的物理存储空间信息,向相应的物理存储空间中写入数据块,并根据该待组建EC条带
所包含的校验块的物理存储空间信息,向相应物理存储空间中写入校验块。
[0153] S308:目标EC管理模块存储每个待组建EC条带的条带信息。其中,一个待组建EC条带的条带信息包括该待组建EC条带包括的数据块的信息(如数据块的标识信息等)和校验
块的信息(如校验块的标识信息)等。
[0154] 本实施例的有益效果可以参考图8所示的实施例的有益效果,此处不再赘述。
[0155] 如图11所示,为本申请实施例提供的一种组建EC条带的方法的流程示意图。图11所示的方法可以包括如下步骤:
[0156] S401:当目标分区的视图信息由第一视图信息更新为第二视图信息时,视图管理模块向与目标分区存在映射关系的目标EC管理模块发送更新消息,更新消息包括第二视图
信息。
[0157] S402:目标EC管理模块根据第二视图信息,确定与目标分区存在映射关系的多个数据处理模块中的每个数据处理模块所在的存储节点的标识信息。
[0158] S403:目标EC管理模块根据每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个待组建EC条带的列组合。
[0159] S404:目标EC管理模块根据每个待组建EC条带的列组合,为该待组建EC条带包括的各校验块分配物理存储空间。
[0160] S405:目标EC管理模块统计目标分区中存在的EC条带(即目标EC管理模块当前所管理的EC条带,或目标分组中已组建的EC条带)中的有效数据块。
[0161] 例如,目标EC管理模块可以通过统计与目标分区存在映射关系的数据处理模块所管理的数据块的写入情况和有效状态,来统计目标分区中存在的EC条带中的有效数据块。
其中,写入情况是指是否在物理存储空间中写入了数据块,可以理解的,如果在物理存储空
间中没有写入数据块,则该数据块是无效数据块。有效状态是指已在物理存储空间中写入
的数据块是否为有效状态。
[0162] S406:目标EC管理模块根据动态规划算法,在目标分区中存在的EC条带中确定K个EC条带,记录该K个EC条带并读取该K个EC条带上的有效数据块。K≥1,K是整数。
[0163] S407:目标EC管理模块根据读取到的有效数据块、每个待组建EC条带的列组合,确定每个待组建EC条带包括的数据块和每个待组建EC条带包括的数据块经校验得到的校验
块。
[0164] 假设该K个EC条带(即K个旧EC条带)重建后得到T个EC条带(即T个新EC条带),那么,该T个EC条带满足如下条件:该T个EC条带构成的EC条带集合包括N列数据块,该T个EC条
带中的任意两列条带的列组合不同,管理同一EC条带的任意两列数据块的数据处理模块所
在的存储节点不同。
[0165] S408:目标EC管理模块根据每个待组建EC条带所包含的校验块的物理存储空间信息中写入校验块。
[0166] S409:目标EC管理模块存储每个待组建EC条带的条带信息。其中,一个待组建EC条带的条带信息包括该待组建EC条带包括的数据块的信息(如数据块的标识信息等)和校验
块的信息(如校验块的标识信息)等。
[0167] 至此,每个待组建EC条带组建完成,即每个新EC条带生效。
[0168] 可选的,目标EC管理模块同时存储每个待组建EC条带的条带信息,也就是说,待组建EC条带集合中的所有待组建EC条带同时生效。
[0169] S410:目标EC管理模块释放该K个EC条带。
[0170] 本实施例的有益效果可以参考图8所示的实施例的有益效果,此处不再赘述。另外,与现有技术提供的重建EC条带的方法相比,本实施例中,是以待组建EC条带集合为粒度
重建EC条带的,也就是说,待组建EC条带集合中的EC条带(即新EC条带)均生成之后,才会释
放旧EC条带。因此:
[0171] 一方面,不会出现旧EC条带上的一部分有效数据块已经生成新EC条带,另外一部分有效数据尚未生成新EC条带的情况,因此可以降低存储开销。例如,图12为按照现有技术
提供的方法和本申请实施例提供的方法的对比示意图。图12中,旧EC条带是旧EC条带1、2,
旧EC条带上的有效数据块如空白矩形所示,无效数据块如斜线阴影矩形所示。为了简洁,图
12中没有示出每个EC条带包括的校验块。如果按照现有技术提供的方法重建EC条带,则可
能出现如图12中的(a)所示的情况,即新EC条带1已经生成,但是,未生成新EC条带的数据块
D4“咬”住旧EC条带1,使得旧EC条带1无法释放,同理,数据块D6“咬”住旧EC条带2,使得旧EC
条带2无法释放。此时,需要存储旧EC条带1、2和新EC条带1共3个EC条带。如果按照现有技术
提供的方法重建EC条带,则所重建得到的新EC条带1和新EC条带2如图12中的(b)所示。由于
本申请实施例中,新EC条带1和新EC条带2同时生效,且在新EC条带1、2生效时,会释放旧EC
条带1、2,因此,在完成重建的过程中,要么需要存储旧EC条带1、2共2个EC条带,要么需要存
储新EC条带1、2共2个EC条带。因此,本申请实施例提供的技术方案可以降低存储开销。
[0172] 另一方面,不会出现旧EC条带上的已经生成新EC条带的有效数据块会存在于新旧两个不同EC条带的情况,因此,可以降低存储开销。
[0173] 以下列举重建EC条带的几种可能的情形。其中,以下每一情形中的K个旧EC条带是指图11所示的实施例中描述的当前已组建的EC条带中确定的K个EC条带,T个新EC条带是指
图11所示的实施例中描述的待组建EC条带集合中的EC条带为例进行说明。
[0174] 情形一:K个旧EC条带基于同一视图信息生成,且K个旧EC条带重建后得到T个新EC条带,K个旧EC条带的列数大于T个新EC条带的列数。
[0175] 例如,如图13A所示,为本申请实施例提供的一种重建EC条带的过程示意图。在图13A中,假设K个旧EC条带是旧EC条带1、2,旧EC条带1包括数据块D1~D3和校验块P1、Q1,有
效数据块是数据块D1、D3;旧EC条带2包括数据块D6~D8和校验块P2、Q2,有效数据块是数据
块D6、D7,那么,各旧EC条带和新EC条带可以如图13A所示。校验块P3、Q3是数据块D1、D2经校
验得到的,校验块P4和Q4是数据块D6、D3经校验得到的。
[0176] 情形二:K个旧EC条带基于同一视图信息生成,且K个旧EC条带重建后得到T个新EC条带,K个旧EC条带的列数小于T个新EC条带的列数。
[0177] 例如,如图13B所示,为本申请实施例提供的一种重建EC条带的过程示意图。在图13B中,假设K个旧EC条带是旧EC条带1、2、3,旧EC条带1包括数据块D1、D3和校验块P1、Q1,有
效数据块是数据块D1;旧EC条带2包括数据块D6、D7和校验块P2、Q2,有效数据块是数据块
D7;旧EC条带3包括数据块D11、D13和校验块P3、Q3,有效数据块是数据块D13;那么,各旧EC
条带和新EC条带可以如图13B所示。其中,校验块P4、Q4是数据块D1、D7、D13经校验得到的。
[0178] 情形三:K个旧EC条带中的一部分旧EC条带是基于一个视图信息生成,另一部分旧EC条带基于另一个视图信息生成。
[0179] 例如,如图13C所示,为本申请实施例提供的一种重建EC条带的过程示意图。在图13C中,假设K个旧EC条带是旧EC条带1~3,旧EC条带1包括数据块D1~D3和校验块P1、Q1,有
效数据块是数据块D1;旧EC条带2包括数据块D11~D13和校验块P3、Q3,有效数据块是数据
块D12、D13;旧EC条带3包括数据块D6、D7和校验块P2、Q2,有效数据块是数据块D6;那么,各
旧EC条带和新EC条带可以如图13C所示。校验块P4、Q4是数据块D1、D12经校验得到的,校验
块P5和Q5是数据块D6、D13经校验得到的。
[0180] 上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意
识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或
硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方
式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的
应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0181] 本申请实施例可以根据上述方法示例对上述客户端或EC管理模块等进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集
成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能
模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻
辑功能划分,实际实现时可以有另外的划分方式。
[0182] 如图14所示,为本申请实施例提供的一种组建EC条带的装置140的结构示意图。该装置140可以用于执行图8、图10A或图10B所示的组建EC条带的方法。该装置140可以是分布
式存储系统中的客户端,或者是部署有客户端的存储节点。分布式存储系统包括至少两个
存储节点,至少两个存储节点上部署有N个数据处理模块。N≥2,N是整数;N个数据处理模块
用于管理一个分区中的数据块。客户端和N个数据处理模块中的任意一个或多个数据处理
模块可以部署在同一存储节点上,也可以部署在不同存储节点上。该装置140包括获取单元
1401和组建单元1402。其中,获取单元1401用于获取该N个数据处理模块中的每个数据处理
模块所在的存储节点的标识信息;根据每个数据处理模块所在的存储节点的标识信息,获
取待组建EC条带集合中的每个待组建EC条带的列组合;其中,待组建EC条带集合包括N列数
据块,该N个数据处理模块中的一个数据处理模块用于管理N列数据块中的一列数据块,任
意两个待组建EC条带的列组合不同;待组建EC条带的列组合是待组建EC条带包括的数据块
所在的列构成的集合,管理同一待组建EC条带的任意两列数据块的数据处理模块所在的存
储节点不同;根据每个待组建EC条带的列组合,组建每个待组建EC条带。例如,结合图8,获
取单元1401可以用于执行S101~S102,组建单元1402可以用于执行S103。
[0183] 可选的,组建单元1402具体用于:获取打散到每个数据处理模块的数据块;根据每个待组建EC条带的列组合和打散到每个数据处理模块的数据块,组建每个待组建EC条带。
例如,结合图10A,组建单元1402可以用于执行S209~S210。
[0184] 例如,结合图2,该装置140具体可以是图2中的客户端31,即该装置140可以通过图2中的CPU实现。例如,结合图2,该装置140具体可以是图2中的存储节点22。
[0185] 本实施例中相关内容的解释可参考上述方法实施例,此处不再赘述。
[0186] 如图15所示,为本申请实施例提供的一种组建EC条带的装置150的结构示意图。该装置150可以用于执行图8或图11所示的组建EC条带的方法。该装置150可以是分布式存储
系统中的EC管理模块,或者是部署有EC管理模块的存储节点。分布式存储系统包括至少两
个存储节点,至少两个存储节点上部署有N个数据处理模块。N≥2,N是整数;N个数据处理模
块用于管理一个分区(即与该EC管理模块存在映射关系的分区)中的数据块。其中,EC管理
模块和N个数据处理模块中的任意一个或多个数据处理模块可以部署在同一存储节点上,
也可以部署在不同存储节点上。该装置150包括获取单元1501和组建单元1502。其中,获取
单元1501用于获取该N个数据处理模块中的每个数据处理模块所在的存储节点的标识信
息;根据每个数据处理模块所在的存储节点的标识信息,获取待组建EC条带集合中的每个
待组建EC条带的列组合;其中,待组建EC条带集合包括N列数据块,该N个数据处理模块中的
一个数据处理模块用于管理N列数据块中的一列数据块,任意两个待组建EC条带的列组合
不同;待组建EC条带的列组合是待组建EC条带包括的数据块所在的列构成的集合,管理同
一待组建EC条带的任意两列数据块的数据处理模块所在的存储节点不同;根据每个待组建
EC条带的列组合,组建每个待组建EC条带。例如,结合图8,获取单元1501可以用于执行S101
~S102,组建单元1502可以用于执行S103。
[0187] 可选的,该分区包含一个或多个EC条带。该情况下,组建单元1502具体用于:在一个或多个EC条带中获取K个EC条带;K≥1,K是整数;将该K个EC条带中的有效数据块进行重
建,得到每个待组建EC条带;其中,该K个EC条带中的有效数据块的个数与待组建EC条带集
合中的数据块的个数相等,且重建前后参与重建的有效数据块所在的列相同。
[0188] 可选的,组建单元1502具体用于:根据动态规划算法,在一个或多个EC条带中获取该K个EC条带;其中,动态规划算法使得该K个EC条带中的有效数据块重建后得到每个待组
建EC条带。例如,结合图11,组建单元1502可以用于执行S406。
[0189] 可选的,组建单元1502具体用于:获取一个或多个EC条带中的各EC条带中有效数据块所在的列构成的列组合;根据各EC条带中有效数据块所在的列构成的列组合、每个待
组建EC条件的列组合和动态规划算法,在一个或多个EC条带中获取该K个EC条带。
[0190] 可选的,组建单元1502具体用于:动态规划算法使得一个或多个EC条带中参与重建的EC条带的个数最大。
[0191] 可选的,该装置150还包括存储单元1503,用于同时存储每个待组建EC条带的条带信息,待组建EC条带的条带信息包括待组建EC条带包括的数据块的信息和校验块的信息。
[0192] 例如,结合图2,该装置150具体可以是图2中的EC管理模块32,即该装置150可以通过图2中的CPU实现。又如,结合图2,该装置150具体可以是图2中的存储节点22。
[0193] 本实施例中相关内容的解释可参考上述方法实施例,此处不再赘述。
[0194] 本申请实施例还提供了一种分布式存储系统,包括至少两个存储节点,该至少两个存储节点上部署有上文提供的客户端(如上述装置140),另外还部署有N个数据处理模
块,以及EC管理模块。例如,该客户端可以是图10A中的客户端,该EC管理模块可以是图10A
中的目标EC管理模块。
[0195] 本申请实施例还提供了一种分布式存储系统,包括至少两个存储节点,该至少两个存储节点上部署有上文提供的EC管理模块(如上述装置150),另外还部署有N个数据处理
模块,以及客户端模块。例如,该客户端可以是图10B中的客户端,该EC管理模块可以是图
10B中的目标EC管理模块。又如,该客户端可以是图11中的客户端,该EC管理模块可以是图
11中的目标EC管理模块。
[0196] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机
程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机执行指令时,全部或
部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计
算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质
中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机
指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数
字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一
个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机
能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数
据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、
或者半导体介质(例如SSD)等。
[0197] 尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实
现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成
部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求
中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措
施不能组合起来产生良好的效果。
[0198] 尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所
附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修
改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不
脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其
等同技术的范围之内,则本申请也意图包含这些改动和变型在内。