一种容错分布存储系统、方法、电子设备及介质转让专利

申请号 : CN202210958817.4

文献号 : CN115061640B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴志伟梅明段楠

申请人 : 深圳云豹智能有限公司

摘要 :

本发明公开了一种容错分布存储系统,至少包括:写数据获取单元,用于获取写数据,写数据包括至少一个超级数据包;切片交织处理单元,用于对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包;介质数据包分发单元,用于将多个介质数据包依次存入存储模块的多个存储介质中;介质数据包汇集单元,用于根据读命令从存储介质中获取多个介质数据包;逻辑数据包复原单元,用于对多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;读数据输出单元,用于输出由多个连续的逻辑数据包形成的原始的超级数据包。本发明还公开了相应的方法、电子设备及介质。实施本发明,可提高存储系统的容错率,并保证数据传输的效率。

权利要求 :

1.一种容错分布存储系统,其特征在于,至少包括:写数据获取单元,用于获取写数据,所述写数据包括至少一个超级数据包,每一所述超级数据包中包含有多个连续的逻辑数据包;

切片交织处理单元,用于对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包,其中,每一逻辑数据包被切片成多个数据片,数据片被分散到不同的介质数据包中;

介质数据包分发单元,用于将所述多个介质数据包依次存入存储模块的多个存储介质中;

介质数据包汇集单元,用于根据读命令,从所述存储介质中获取所述多个介质数据包;

逻辑数据包复原单元,用于对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;

读数据输出单元,用于输出由多个连续的逻辑数据包形成的原始的超级数据包;

其中,所述切片交织处理单元进一步包括:

数据包分片单元,用于根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;

缓存写入单元,用于依序将各数据片存入缓存空间中;

介质数据包重组单元,用于根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片;

地址计算单元,用于对缓存空间中的各片槽的初始地址进行计算;

交织逻辑管理器,用于存储具交织逻辑;

片槽寄存器,用于记录缓存空间中各片槽的状态;

标签缓存器,用于记录生成介质逻辑包的输出序列;所述缓存写入单元进一步包括:片槽状态搜索单元,用于按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;

写入处理单元,用于将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用;

在缓存空间的输入和输出之间设置有CRC逻辑,以数据片为单位进行缓存校验。

2.如权利要求1所述的系统,其特征在于,所述介质数据包重组单元至少包括:缓存输出处理单元,用于根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;

重组单元,用于将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。

3.如权利要求2所述的系统,其特征在于,所述逻辑数据包复原单元包括:介质数据包分片单元,用于对所述多个介质数据包进行切片处理,获得多个数据片;

缓存处理单元,用于对所述多个数据片进行缓存处理;

逻辑包重组单元,用于根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包。

4.如权利要求1‑3任一项所述的系统,其特征在于,进一步包括:ECC编码器,设置于所述写数据获取单元和切片交织处理单元之间,用于对每一超级数据包中的各逻辑数据包进行ECC编码处理;

ECC解码器,设置于所述逻辑数据包复原单元与读数据输出单元之间,用于对重组获得的原始逻辑数据包进行ECC解码处理。

5.一种容错分布存储方法,其特征在于,采用如权利要求1至4任一项的容错分布存储系统实现,所述方法 至少包括步骤:获取写数据,所述写数据包括至少一个超级数据包,所述超级数据包含有多个连续的逻辑数据包;

对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包,其中,每一逻辑数据包被切片成多个数据片,各数据片被分散到不同的介质数据包中;

将所述多个介质数据包依次存入存储模块的多个存储介质中;

根据读命令,从所述存储介质中获取所述多个介质数据包;

对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;

输出由多个连续的逻辑数据包形成的原始的超级数据包。

6.如权利要求5所述的方法,其特征在于,所述对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包的步骤进一步包括:根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;

依序将各数据片存入缓存空间中;

根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。

7.如权利要求6所述的方法,其特征在于,所述依序将各数据片存入缓存空间的步骤进一步包括:按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;

将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用;

重复上述步骤,直至将各数据片存入缓存空间的空闲片槽中。

8.如权利要求7所述的方法,其特征在于,所述根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包的步骤至少包括:根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;

将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。

9.如权利要求8所述的方法,其特征在于,所述对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包,形成原始的超级数据包的步骤包括:对所述多个介质数据包进行切片处理,获得多个数据片;

根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包;

将多个原始逻辑数据包按顺序重组为原始超级数据包。

10.如权利要求5至9任一项所述的方法,其特征在于,进一步包括:在写数据阶段,对每一超级数据包中的各逻辑数据包进行ECC编码处理;

在读数据阶段,对重组获得的原始逻辑数据包进行ECC解码处理。

11.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求5至9中任一项所述的方法的步骤。

12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求5至10中任一项所述的方法的步骤。

说明书 :

一种容错分布存储系统、方法、电子设备及介质

技术领域

[0001] 本发明涉及数据存储技术领域,特别是涉及一种容错分布存储系统、方法、电子设备及介质。

背景技术

[0002] 图1是现有技术中一个典型的数据存储系统结构示意图,其大致分为输入写路径和输出读路径。
[0003] 首先,在输入写路径上,输入的数据包首先经过纠错码(Error Correction Code ,ECC)编码器处理,该ECC编码器可以是诸如简单的汉明码编码器、RS编码器或者LDPC编码器等,ECC编码器会在数据中增加额外的校验冗余位,以提供在读数据时具备一定的纠正错误能力。数据包完成编码后会依次写入多个存储介质中,可以是DRAM颗粒,也可以是固态硬盘。分发过程一般采用均匀分发到多个存储介质中,以保证带宽较低的存储介质不会反压前级带宽较高的数据流,从而保证整个系统的带宽。
[0004] 在输出读路径上,需要从不同的存储介质中依次读出数据包,排序后送出给ECC解码器,通过特定解码算法纠错去除校验冗余位,将原始数据包输出。
[0005] 由于存储介质一般是系统中寿命最短,出错概率最大的器件,若存储介质完全损坏,读出来的数据包会包含大量错误,极有可能超过解码器的纠错能力,从而造成数据包的不可恢复。而在一些应用场合中,例如数据中心产品一般要求高可靠性,即使任一节点出现损坏,也要求不能影响整个系统的运转。所以现有的分布存储系统为了保证高可靠性,需要增加更强的容错能力来应对某个存储介质的完全损坏,比如存储介质增加备份,但这会带来整个系统的复杂性,并且增加数据中心的整体成本。

发明内容

[0006] 本发明所要解决的技术问题在于,提供一种容错分布存储方法、系统、电子设备及介质,提高了存储系统的容错率,并保证数据传输的效率。
[0007] 为解决上述技术问题,作为本发明的一方面,提供一种容错分布存储系统,至少包括:
[0008] 写数据获取单元,用于获取写数据,所述写数据包括至少一个超级数据包,每一所述超级数据包中包含有多个连续的逻辑数据包;
[0009] 切片交织处理单元,用于对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包,其中,每一逻辑数据包被切片成多个数据片,各数据片被分散到不同的介质数据包中;
[0010] 介质数据包分发单元,用于将所述多个介质数据包依次存入存储模块的多个存储介质中;
[0011] 介质数据包汇集单元,用于根据读命令,从所述存储介质中获取所述多个介质数据包;
[0012] 逻辑数据包复原单元,用于对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;
[0013] 读数据输出单元,用于输出由多个连续的逻辑数据包形成的原始的超级数据包。
[0014] 其中,所述切片交织处理单元进一步包括:
[0015] 数据包分片单元,用于根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;
[0016] 缓存写入单元,用于依序将各数据片存入缓存空间中;
[0017] 介质数据包重组单元,用于根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0018] 其中,所述缓存写入单元进一步包括:
[0019] 片槽状态搜索单元,用于按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;
[0020] 写入处理单元,用于将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用。
[0021] 其中,所述介质数据包重组单元至少包括:
[0022] 缓存输出处理单元,用于根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;
[0023] 重组单元,用于将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0024] 其中,所述逻辑数据包复原单元包括:
[0025] 介质数据包分片单元,用于对所述多个介质数据包进行切片处理,获得多个数据片;
[0026] 缓存处理单元,用于对所述多个数据片进行缓存处理;
[0027] 逻辑包重组单元,用于根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包。
[0028] 其中,进一步包括:
[0029] ECC编码器,设置于所述写数据获取单元和切片交织处理单元之间,用于对每一超级数据包中的各逻辑数据包进行ECC编码处理;
[0030] ECC解码器,设置于所述逻辑数据包复原单元与读数据输出单元之间,用于对重组获得的原始逻辑数据包进行ECC解码处理。
[0031] 相应地,本发明的另一方面,还提供一种高效的容错分布存储方法,其至少包括步骤:
[0032] 获取写数据,所述写数据包括至少一个超级数据包,所述超级数据包含有多个连续的逻辑数据包;
[0033] 对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成相同数目的多个介质数据包,其中,每一逻辑数据包被切片成多个数据片,各数据片被分散到不同的介质数据包中;
[0034] 将所述多个介质数据包依次存入存储模块的多个存储介质中;
[0035] 根据读命令,从所述存储介质中获取所述多个介质数据包;
[0036] 对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;
[0037] 输出由多个连续的逻辑数据包形成的原始的超级数据包。
[0038] 其中,所述对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包的步骤进一步包括:
[0039] 根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;
[0040] 依序将各数据片存入缓存空间中;
[0041] 根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0042] 其中,所述依序将各数据片存入缓存空间的步骤进一步包括:
[0043] 按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;
[0044] 将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用;
[0045] 重复上述步骤,直至将各数据片存入缓存空间的空闲片槽中。
[0046] 其中,根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包的步骤至少包括:
[0047] 根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;
[0048] 将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0049] 其中,所述对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包,形成原始的超级数据包的步骤包括:
[0050] 对所述多个介质数据包进行切片处理,获得多个数据片;
[0051] 根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包;
[0052] 将多个原始逻辑数据包按顺序重组为原始超级数据包。
[0053] 其中,进一步包括:
[0054] 在写数据阶段,对每一超级数据包中的各逻辑数据包进行ECC编码处理;
[0055] 在读数据阶段,对重组获得的原始逻辑数据包进行ECC解码处理。
[0056] 本发明的再一方面,还提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现前述的方法的步骤。
[0057] 本发明的又一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述的方法的步骤。
[0058] 实施本发明实施例,具有如下的有益效果:
[0059] 本发明提供一种容错分布存储系统、方法、电子设备及介质。通过在将逻辑数据包写入存储介质前,对逻辑数据包进行切片交织处理,形成多个介质数据包,然后再依次写入存储介质中。通过这样的设置,即使某个存储介质出现故障,则在读数据过程中,该存储介质中的故障数据会被分配到多个逻辑数据包中,可以完成纠错操作。从而这样可以在单个数据包中实现更强大的纠错能力,从而增加系统容错能力,降低数据中心成本。
[0060] 同时,在切片交织逻辑中,将缓存空间中划分为多个片槽,并对每一片槽标记当前状态,根据片槽的标签的大小来实现写入或读取操作,可对缓存空间实现乱序写入读出,从而实现利用一个超级逻辑包大小的缓存空间来实现缓存操作,但不会出现气泡现象,在不增加硬件缓存的基础上保证连续的数据流和带宽。

附图说明

[0061] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,根据这些附图获得其他的附图仍属于本发明的范畴。
[0062] 图1是现有技术中一个典型的数据存储系统结构示意图;
[0063] 图2为本发明提供的一种容错分布存储系统的一个实施例的结构示意图;
[0064] 图3为本发明涉及的数据包切片交织原理示意图;
[0065] 图4为图2中涉及的切片交织处理单元的结构示意图;
[0066] 图5为本发明涉及在缓存空间中采用单超级数据包缓存的原理示意图;
[0067] 图6为本发明涉及在缓存空间中采用双超级数据包缓存的原理示意图;
[0068] 图7为本发明所采用的缓存空间中第一个超级逻辑数据包写入缓存后的示意图;
[0069] 图8为本发明所采用的缓存空间中第二个超级逻辑数据包写入缓存后的示意图;
[0070] 图9为本发明所采用的缓存空间中第三个超级逻辑数据包写入缓存后的示意图;
[0071] 图10为图4中缓存写入单元的结构示意图;
[0072] 图11为图4中介质数据包重组单元的结构示意图;
[0073] 图12为本发明的一个实施例中切片交织处理单元采用的硬件实施的架构示意图;
[0074] 图13为图2中逻辑数据包复原单元的结构示意图;
[0075] 图14为本发明提供的一种容错分布存储方法的一个实施例的主流程示意图。

具体实施方式

[0076] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0077] 如图2所示,示出了本发明提供的一种容错分布存储系统的一个实施例的结构示意图。一并结合图3至图13所示,在本实施例中,所述系统至少包括:
[0078] 写数据获取单元1,用于获取写数据,所述写数据包括至少一个超级数据包(Super‑packet),每一所述超级数据包中包含有多个连续的逻辑数据包(Logical packet);可以理解的是,其中每一超级数据包中包含的逻辑数据包的数量可以根据实际需要来确定;
[0079] 切片交织处理单元3,用于对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包(Media packet),其中,每一逻辑数据包被切片成多个数据片(slice),各数据片被分散到不同的介质数据包中,故每一逻辑数据包初切成多少数据片的数目可以根据需要进行确定,例如在一个实施例中,一个超级数据包中存在N个逻辑数据包,则可以将每一逻辑数据包切成N片数据片,在每个逻辑数据包中选择一个数据片组成一个介质数据包,从而可以组成N个介质数据包。可以理解的是,在其他的实施例中,也可以将每一逻辑数据包切成少于N片的数据片;从中选择少于N片的数据片组成一个介质数据包。
[0080] 介质数据包分发单元4,用于将所述多个介质数据包依次存入存储模块的多个存储介质5中;可以理解的是,在本发明的实施例中,所述存储介质5支持各种不同类型的存储介质,诸如DRAM,NAND Flash或者系统上的各种终端节点等;
[0081] 介质数据包汇集单元6,用于根据读命令,从所述存储介质中获取所述多个介质数据包;
[0082] 逻辑数据包复原单元7,用于对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;
[0083] 读数据输出单元9,用于输出由多个连续的逻辑数据包形成的原始的超级数据包。
[0084] 其中,该容错分布存储系统进一步包括:
[0085] ECC编码器2,设置于所述写数据获取单元1和切片交织处理单元3之间,用于对每一超级数据包中的各逻辑数据包进行ECC编码处理;
[0086] ECC解码器8,设置于所述逻辑数据包复原单元7与读数据输出单元9之间,用于对重组获得的原始逻辑数据包进行ECC解码处理。
[0087] 在本发明的实施例中,所述切片交织处理单元3需要对每一超级数据包中的多个逻辑数据包进行切片交织处理。所述切片交织处理的原理可以参照图3所示。
[0088] 更具体地,在本发明的实施例中,可以根据解码器的最大纠错能力,逻辑数据包会被分拆成多片,以片为最小单元,多个逻辑数据包会进行重组以形成多个介质数据包,随后这些介质数据包会被依次写入到不同的存储介质中。当进行数据包读取操作时,同一个介质数据包的逻辑片会被分散到不同的逻辑数据包中,数据错误也会被分散到不同的逻辑数据包中,只要每个逻辑数据包中的错误不超过解码器纠错能力,那所有的错误都会被纠正,从而得到正确的数据。
[0089] 结合图3所示,假设某种场景下,终端存储介质有4个,数据包长度为定长1024字节,而解码器的最大纠错能力为300字节,那数据包可以分为4片,每片256字节,相邻的4个数据包可以进行切片交织。图中示出了将4个数据包进行切片,交织组成四个介质数据包。
[0090] 这样当有某个介质数据包的1024字节完全损坏时,这些损坏的字节会被分散到不同的4个逻辑数据包,每个逻辑数据包只会有256字节的损坏数据,不超过解码器的最大纠错能力300字节,所以所有的介质数据包会被解码纠错和恢复。
[0091] 可以理解的是,数据包的大小可能无法被片数整除,从而存在数据片不会是均匀大小的,所以在交织中必须保证每个数据片所在的相对位置不会改变,比如原来数据片属于逻辑数据包的第n个位置,那么交织后,它也必须在某个介质包的第n个位置,从而保证交织后的介质包跟原来的逻辑数据包是一样大小的。
[0092] 在本发明的实施例中,将多个关联的数据包组成的大数据包称为超级数据包,进行切片分拆前的数据包称为逻辑数据包,切片分拆后的数据包称为介质数据包,组成数据包的最小可见单元称为片。则SxLysz代表第x个超级数据包中的第y个逻辑数据包中的第z个片,SxMysz代表第x个超级数据包中的第y个介质数据包中的第z个片。
[0093] 请结合图4所示,在本发明的实施例中,所述切片交织处理单元进一步包括:
[0094] 数据包分片单元,用于根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;
[0095] 缓存写入单元,用于依序将各数据片存入缓存空间中;
[0096] 介质数据包重组单元,用于根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0097] 可以理解的是,由于逻辑数据包的每个切片会分散到各个介质数据包中,也就是说一般情况下每个介质数据包会含有所有逻辑数据包的切片,在一个超级数据包中,为了实现逻辑数据包的切片交织,第一个介质数据包必须等待所有的逻辑数据包都缓存好之后才能输出,所以逻辑数据包转介质数据包模块必须有一个大的缓冲存储器,用来保存超级数据包所有的切片。
[0098] 为了保证带宽,在逻辑数据包切片交织模块中,逻辑数据包的输入和输出必须保持连续,但对于一个特定的超级数据包格式,如果缓存只有一个超级数据包的大小,那当输入的逻辑数据包被依次存入这个大缓冲存储器时,由于每个介质数据包都需要所有逻辑数据包的切片,或者说最后一个介质数据包也需要第一个逻辑数据包的部分切片,那么在所有的介质数据包都被输出之前,缓冲存储器不能被之后的超级逻辑数据包覆盖,会造成每个超级数据包之间的气泡。以图5为例,每个数据包被分成4个切片,如果缓冲存储器只有1个超级数据包大小,那每个超级数据包中间都会有一个间隔,导致带宽只有原来的一半。
[0099] 为了解决这种气泡的方法可以采用乒乓方案,将缓冲存储器扩大成原来的两倍,如图6所示,数据包转换器可以得到无气泡输出,但缓冲存储器硅片面积翻倍,带来了成本的提高。
[0100] 本发明的实施例中提出了一种新的缓存方案,其采用单超级数据包缓存但不会产生气泡。在本发明的这种缓存方案中,缓存被内部划分为多个片槽,每个片槽都有唯一的编号,可以被乱序访问,每个片槽会有一个状态标志位来指示是否可用,搜索可用片槽时从低编号向高编号搜索。输入的逻辑数据包切片会依次被分配到最小编号的空闲片槽,同时片槽被标志为不可用,当这个片槽内的数据片被作为介质数据包的一部分输出后,片槽重新被标志为可用。乱序访问保证了片槽的高效复用,进而提高了缓存器的利用效率。
[0101] 具体地,如图7所示,仍以每个数据包4片,每4个逻辑数据包组成一个超级数据包为例进行说明。图7示出了第一个超级数据包输入之后的缓冲存储器内部示意图,分成16个片槽,片槽的大小必须跟数据包中最大数据片一致,假设为N字节,那么第一个片槽的起始地址是0,第二个片槽的起始地址是N,以此类推,第16个片槽的起始地址就是15*N。
[0102] 接下来按照图3的数据包切片交织原则,S0L0s0会作为介质数据包的S0M0s0输出,同时S1L0s0会被写入到第0个片槽(索引从0开始),紧接着S0L1s1会作为介质数据包的S0M0s1输出,同时S1L0s1会被写入到第4个片槽中,依次类推,当第一个超级介质数据包被输出后,第二个超级逻辑数据包也会被放入缓存中,具体如图8所示。
[0103] 接着当第二个超级介质数据包被输出,各个片槽中的数据片被挨个输出,同时第三个超级逻辑数据包的数据片被挨个放到对应可用的片槽中,图9中示出了第三个超级逻辑数据包被放入缓存后的状态。
[0104] 更具体地,如图10所示,所述缓存写入单元31进一步包括:
[0105] 片槽状态搜索单元310,用于按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;
[0106] 写入处理单元311,用于将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用。
[0107] 更具体地,如图11所示,所述介质数据包重组单元32至少包括:
[0108] 缓存输出处理单元320,用于根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;
[0109] 重组单元321,用于将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0110] 如图12所示,示出了本发明中切片交织处理单元的一个实际的硬件框架图。
[0111] 可以理解的是,在本发明实施例中,所述切片交织处理单元可以采用如图12的硬件结构来实现。结合前面描述的原理,在该实施例中,从上面前几个超级数据包的缓存状态可以看出,输入的逻辑数据包通过数据包分片器进行切片处理,形成多个数据片。片计数器用于对每一数据片进行计数;地址计算单元用于对缓存空间中的各片槽的初始地址进行计算;而交织逻辑管理器用于存储具体的交织逻辑;而片槽寄存器来记录缓存空间中各片槽的状态(可用或空闲);标签缓存器用于记录生成介质逻辑包的输出序列。通过片计数器、地址计算单元、片槽寄存器的配合,可以将各数据片无序地分配到各个片槽中,通过寄存器模块来记录各个片槽的可用状态,根据片槽可用状态得到可用的最小标签号,同时利用标签缓存器来记录输出序列。逻辑数据包进来后被分片,根据预编程的切片交织策略,数据片对应的标签号被写入输出序列的对应输出位置,根据标签缓存器中的输出序列,后续会依次输出序列中的各个标签号,地址计算模块根据标签号算出片槽在缓存中的地址,从而从缓存空间中读取出对应的切片数据。
[0112] 片槽缓存可在输入和输出加上CRC逻辑来保证数据片的正确性,以数据片为单位做缓存校验,避免缓存的SRAM需要每行都有校验位
[0113] 如图13所示,在本发明的实施例中,所述逻辑数据包复原单元13包括:
[0114] 介质数据包分片单元130,用于对所述多个介质数据包进行切片处理,获得多个数据片;
[0115] 缓存处理单元131,用于对所述多个数据片进行缓存处理;可以理解的是,在本发明的一个实施例中,所述缓存处理单元131所采用的缓存策略可以采用前述图7至图9所介绍的缓存方法,即采用乱序写入的方式,利用一个单超级数据包的缓存空间实现缓存,而不会产生气泡。
[0116] 逻辑包重组单元132,用于根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包。
[0117] 如图14所示,示出了本发明提供的一种容错分布存储方法的一个实施例的主流程示意图。在本实施例中,所述方法至少包括如下步骤:
[0118] 步骤S10,获取写数据,所述写数据包括至少一个超级数据包,所述超级数据包含有多个连续的逻辑数据包;
[0119] 步骤S11,对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包,其中,每一逻辑数据包被切片成多个数据片,各数据片被分散到不同的介质数据包中;
[0120] 步骤S12,将所述多个介质数据包依次存入存储模块的多个存储介质中;
[0121] 步骤S13,根据读命令,从所述存储介质中获取所述多个介质数据包;
[0122] 步骤S14,对所述多个介质数据包进行解交织还原处理,还原成原始的多个逻辑数据包;
[0123] 步骤S15,输出由多个连续的逻辑数据包形成的原始的超级数据包。
[0124] 在一个具体的例子中,在所述步骤S11中,所述对每一超级数据包中的多个逻辑数据包进行切片交织处理,重组成多个介质数据包的步骤进一步包括:
[0125] 根据预先确定的数据片的大小,将每一超级数据包中每一个逻辑数据包进行切片处理,形成多个数据片,并对每一数据进行编号标记;
[0126] 依序将各数据片存入缓存空间中;
[0127] 根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包;其中每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0128] 在一个具体的例子中,所述步骤S12中,所述依序将各数据片存入缓存空间的步骤进一步包括:
[0129] 按编号顺序从低向高,搜索当前缓存空间中空闲的片槽;
[0130] 将当前待缓存的数据片存入编号最低的空闲片槽,并将所述片槽的状态修改为已使用;
[0131] 重复上述步骤,直至将各数据片存入缓存空间的空闲片槽中。
[0132] 其中,根据预先确定的交织重组原则,从所述缓存空间中依次取出相应的数据片,组成多个介质数据包的步骤至少包括:
[0133] 根据预先确定的交织重组原则,按顺序从所述缓存的空间的片槽中,取出需要重组的数据片,同时将已取出数据片的片槽的状态更新为空闲状态;
[0134] 将所述取出需要重组的数据片重组成多个介质数据包,其中,每一介质数据包中均包含所述超级数据包中每一个逻辑数据包的一个数据片。
[0135] 在一个具体的例子中,在步骤S14中,所述对所述多个介质数据进行解交织还原处理,还原成原始的多个逻辑数据,形成原始的超级数据包的步骤包括:
[0136] 对所述多个介质数据包进行切片处理,获得多个数据片;
[0137] 根据数据片对应的编号,将同属于一个逻辑数据包的数据片进行重组,形成原始逻辑数据包;
[0138] 将多个原始逻辑数据包按顺序重组为原始超级数据包。
[0139] 其中,进一步包括:
[0140] 在写数据阶段,对每一超级数据包中的各逻辑数据包进行ECC编码处理;
[0141] 在读数据阶段,对重组获得的原始逻辑数据包进行ECC解码处理。
[0142] 可以理解的是,在本发明提供的方法中,更多的细节,可以参考前述对图2至图13的描述,在此不进行赘述。
[0143] 本发明的再一方面,还提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现前述中图14描述的方法的步骤。
[0144] 可以理解的是,该电子设备可以是数据处理器卡(Data Processing Unit,DPU),或者是插有数据处理器卡的服务器等设备。
[0145] 本发明的又一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述如图14描述的方法的步骤。
[0146] 实施本发明实施例,具有如下的有益效果:
[0147] 本发明提供一种容错分布存储系统、方法、电子设备及介质。通过在将逻辑数据包写入存储介质前,对逻辑数据包进行切片交织处理,形成多个介质数据包,然后再依次写入存储介质中。通过这样的设置,即使某个存储介质出现故障,则在读数据过程中,该存储介质中的故障数据会被分配到多个逻辑数据包中,可以完成纠错操作。从而这样可以在单个数据包中实现更强大的纠错能力,从而增加系统容错能力,降低数据中心成本。
[0148] 同时,在切片交织逻辑中,将缓存空间中划分为多个片槽,并对每一片槽标记当前状态,根据片槽的标签的大小来实现写入或读取操作,可对缓存空间实现乱序写入读出,从而实现利用一个超级逻辑包大小的缓存空间来实现缓存操作,但不会出现气泡现象,在不增加硬件缓存的基础上保证连续的数据流和带宽。
[0149] 本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0150] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0151] 以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。