CodePlugin:将Dedup应用到纠删码系统

Debup的纠删码应用

论文名字:CodePlugin: Plugging Deduplication into Erasure Coding for Cloud Storage.

简介

当前云存储系统发展迅速,在一个系统中发生磁盘故障的也不再是例外,因此不少系统采用纠删码保护数据免于丢失;同时数据量的增大导致冗余的数据越来越多,一种常见的减少数据冗余的方式是采用dedup方式。 本文将dedup应用于纠删码的云存储系统中,不仅减少了存储开销(冗余的数据块以及冗余数据块引起的编码块都不需要额外存储),同时还减少了编码的开销(很多冗余的数据块不需要进行编码)。实验结果表明:减少存储开销17%,提升编码吞吐率20%

思想主要分三步走:

1,Dedup重复数据删除

本文采用固定块大小的dedup方案,将整个文件切成固定大小的数据块,然后对每一个数据块计算一个hash值,并将此hash值存入到hash表格中。 它并没有采用全局dedup方案,使用了cache来存储unique的hash指纹。对于新到来的数据块,计算hash值,与cache中的指纹比较,如果相同,则表明此块是重复数据块,否则不是。

举例:
CodePlugin:将Dedup应用到纠删码系统_第1张图片
如上图所示,如果文件采用RS(4,2)编码,那么一个文件会被切分为4个子文件(sub-file), 例如上面的fid=0的文件,被切分成4个子文件,每一行代表一个子文件,同时每一个子文件有4(注意,这个是巧合,也许可能有8个,10个,它的大小由块的大小以及子文件的大小来决定)个数据块。 因此对于给定的一个数据块可以使用(fid, sid, cid)来进行唯一标识。 有些块标上灰色背景表明这些块是冗余数据块。

RS(4,2)编码:
具体的编码过程不在本文中论述,简单说来就是4个数据块经过运算可以生成2个校验块,这6个数据块可以保证其中的任意的4个块都可以恢复原来的4个数据块,也就是说具有双容错的特性。对于上面的图,每一列会使用RS(4,2)进行编码生成2个校验块。

疑问:
我们发现上面的文件有5个冗余数据块,如果刚好4个冗余数据块位于一列上,那么其实此列是不需要进行RS编码的。 因为既然是冗余数据块,那么它们肯定已经存储到系统中,并且已经进行编码过了。

2,Pseudo-shuffling伪重新排布

根据上面提出的疑问,既然5个冗余不在一列上,我们可以通过重新散布把他们移动到同一列上就行了。下面伪重新散布就是干这个事情的。

CodePlugin:将Dedup应用到纠删码系统_第2张图片
可以看到经过重新散布,就把冗余的数据块都挤到最后一列了。我们发现其实还有一个冗余数据块,但是由于这个冗余数据块所在的列上有非冗余的块,因此它所在的一列也必须计算校验。

优点:
通过这种方式,冗余的数据块的存储只有一份,同时其不需要进行计算校验,而且校验块也就没有了。 减少了存储开销以及编码开销。

3,Sub-files Exchange文件片交换

上面的没有考虑这样的一种情况。有一个文件一行都是冗余块,其他没有冗余块;另一个文件只有一行不是冗余块,其他都是冗余块,这两个文件的每一列肯定都会有非冗余块,因此都需要计算校验。 下面的方式就是进行这样的优化的:

CodePlugin:将Dedup应用到纠删码系统_第3张图片
从上图可以看出,文件0的第一行都是非冗余块,其他冗余块很多,但是文件1第一行的冗余块很多,其他基本都是非冗余块。 因此如果进行子文件交换(sub-file exchange),换成after switching这样的图,就会发现需要进行编码的数据就少了。 过去需要进行8次RS编码,现在只需要6次编码了,同时还减少了4个校验块的存储。

你可能感兴趣的:(云存储)