重复数据删除技术的研究与分析

 

重复数据删除技术的

研究与分析

 

摘要

基于磁盘的重删存储已经作为企业数据保护中新一代存储兴起发展并将代替磁带库的存储形式。数据重删技术删除冗余的数据并将数据压缩为一种高紧凑的格式,从而节省容量使磁盘备份变得经济适用,但磁带却做不到。企业数据保护中重要的要求是高吞吐量,典型的为100MB/秒,要尽快地完成备份操作。一个重要的难题是,在这样的速率及低性能系统下如何鉴别并删除重复的数据段或数据块, 这个系统难以提供足够的RAM来存储已有数据段的索引信息,如此一来,每一个输入的数据段就会访问一次的磁盘索引。

本篇论文简单叙述了三种重删策略,包括Data Domain重删文件系统中采用的方案,稀疏索引和Extreme Binning。我们分析了他们的原理及实现过程,以及他们的实验结果。前两种方法考虑“块局部性”来提高重删效率。最后一种检测文件的相似性而不是块的局部性来实现高的重删性能。他们都比存在的方法用了更少的RAM,而且不同程度地避免了磁盘瓶颈问题。最后,通过对他们的比较,分析了他们各自的优缺点。

关键字:数据重删 块局部性 稀疏索引

Disk-based deduplication storage has emerged as the new-generation storage for enterprise data protection to replace tape libraries. Deduplication removes redundant data to compress data into a highly compact form and makes it economical to store backups on disk instead of tape.  A crucial requirement for enterprise data protection is high throughputtypically 100MB/sec,

which enables backups to complete quickly. A significant challenge is to identify and eliminate duplicate data segments or chunks at this rate on a low-cost system that cannot afford enough RAM to store an index of the stored segments and maybe forced to access an on-disk index for every input segment.

    This paper illustrates and presents three Deduplication strategies, including DDDFS’s method, Sparse Indexing , and Extreme Binning. We analyse their theories and implementation in detailas well as their experimental results. The prior two methods consider “chunk locality” to improve the deduplication level. The last one exploits file similarity instead of chunk locality to implement high deduplication quality. They all use smaller RAM than existing approaches and avoid the disk bottleneck problem to some extent. At lastwe discuss their advantages and disadvantages respectively by comparison among them.

 

Key WordsDeduplication  chunk locality  Sparse Indexing

 

1.引言

以前,我们总是用磁带来备份数据,然而随着磁盘的容量越来越大,用磁盘备份数据已成为普遍的现象。尽管磁带代价低,顺序传输率100MB/Sec左右,但是磁带管理操作代价高,恢复时出错率高,不能随机定位,不适合用于数据恢复。与磁带相比,磁盘不但可以随机访问,而且可以加速备份与恢复操作,所以说用磁盘到磁盘的备份(D2D ,disk to disk)是对企业、政府、银行等组织更好的备份选择。大量数据的存储要求备份设备有足够大的存储容量,这对备份中心来说,是一个极大的难题。为了减少数据的存储量,基于磁盘的重复数据删除存储(Disk-based deduplication storage)作为新一代的存储系统应运而生,逐渐完善成熟。重复数据删除技术将删除存储系统中数据段(或块)中冗余的数据,从而大大减少了存储容量,节省了成本。

不同的厂商会提供不同的重删方法,所有这些方法的目的都是要减少数据,减少磁盘的使用率,减少磁盘的IO操作,减少内存的使用量,同时还要达到并维持一定的高带宽。总之在追求较高重删率的同时,要考虑各种性能需求。

目前,基于块的重删(chunk-based deduplication)是最适合于D2D 的重删方法,它重删掉备份中重复的数据块,而不需要了解备份流的格式。在这种方法中,首先数据基于内容被拆分为变长的数据块,新来的数据块与已经存储的数据块进行hash比较,只有不存在的数据块才会被存储。然而,随着数据规模的扩大,基于数据块的重删面临基于块查询(chunk-lookup)的磁盘瓶颈问题:传统方案需要一个全部块的索引表,来映射已经存在磁盘上的数据块(的hash)。但是在RAM中保存一个庞大的索引表并不实际,而且对每一个新来的数据进行一次索引致使搜索效率太低。

本文研究分析了三种重删策略,来解决这些情况。

Zhu et al.[1]与Lillibridge et al.[2]提出的方案都是基于数据的局部性的设计来避免磁盘瓶颈问题。Bhagwat et al. 提出的Extreme Bining方案[3]是针对于没有局部性的大规模数据进行分析,考虑文件的相似性而不是块的局部性。

论文的其余部分安排如下:第二节描述了Zhu et al. 在基于Data Domain 重删文件系统(DDDFS)中提出的一些技术策略,简单地分析其中的原理及实验结果。第三节描述了Sparse Indexing的原理及实验结果。第四节描述了Extreme Binning 的原理及实验结果。第五节提出结论,分析比较各个方案的优劣点并作出探讨与评价。

2 DDDFS中的重删策略

2.1 原理

Zhu et al.提出的方案目的在于如何实现一个系统开销低、高吞吐量的相同段重删(Identical Segment Deduplication)存储系统。实现的关键是如何发现重复段。给定一个8KB大小的段,如果要完成100MB/sec 的吞吐量目标,则重删系统必须实现每秒处理约12000 个段。尽管我们可以在内存中建立数据段指纹的内存索引(in-memory)来到达这个性能,但是索引的大小将会增加系统的很大开销。考虑一个8KB大小的段,一个段得指纹为20字节,如存储8TB的都是唯一的数据段,那么我们需要20GB的内存来存储指纹。

根据以往的方法,我们把数据段的指纹索引存到磁盘上,再用缓存来加速索引的访问。但是,这种传统缓存并不适应于这种情况。指纹的值是随机的,并且对于数据段索引的访问没有局部性。更重要的是,备份中有大量的数据流向系统,很少有时间局部性的情况。对于每日增量备份,一周一次全备份的系统来说,大多数数据段仅仅会在全备份中成为可引用信息。所以缓存中的LRU算法在这种情况下并不适应。比如,Venti 系统实现了这样的缓存(结合索引与块缓存),但是仅仅提高了16%的写吞吐量(有5.6MB/sec 到6.5MB/sec)。这与100MB/sec的吞吐量目标要求差距太大,主要的原因是缓存命中率很低。低的缓存命中率将导致频繁的磁盘IO操作,极大的增加了重删系统的开销。

本策略的关键思想是结合使用三种方法减少在重删过程中对磁盘上索引的搜索次数。这三种方法都在DDFS中实现。DDFS的架构如下图2-1所以:

图2-1 DDFS 体系架构

 

DDFS结构由一系列软件栈组件构成,在最上层,DDFS通过提供一个公共访问接口支持多种访问协议,包括NFS、CIFS以及VTL(virtual tape library)。

当数据流来到系统时,它首先经过标准接口到达文件服务层,这个文件服务层内管理名字空间(name space)以及元数据。接着请求被送到管理文件内容的内容存储层(Content Store)。内容存储把数据流拆分为段,送到段存储层(Segment Store),同时保存一个文件的引用(指向文件的段)。段存储执行实际的重删工作,然后把重删后的段包装为较大的单元,用Ziv-Lempel 算法的一个修改版进一步压缩数据[4],最后把压缩后的数据写入到由容器管理器(Container Manager)管理的容器中。

读数据时,客户端会通过文件服务层及标准接口来驱动读操作。内容存储使用指向重删后的数据段的引用来传送客户想要的数据。段存储从容器管理器中预提取,解压,读取并缓存数据段。

为了加速重删存储系统的重删处理速度而使用的三种方法是:汇总向量 (Summary Vector),Stream-Informed  Segment Layout(SISL)以及局部维持缓存(Locality Preserved Caching)。

汇总向量的目标在于减少这种情景发生的次数:系统为寻找重复段访问磁盘结果重复段却不存在。可以认为汇总向量是一个在内存中维持段索引的汇总。如果汇总向量指示一个段不在索引中,就说明没必要进一步查询了,这个数据段应当作为新的段而被保存。如果汇总向量指示一个段在索引中,那么段实际上在索引中的可能性极高,但是不能保证。

汇总向量实现如下的三个操作:

l         Init()

l         Insert(fingerprint)

l         Lookup(fingerprint)

在设计中使用Bloom Filter实现汇总向量[5]。Bloom filter 使用m 位(bit)向量指示段索引中n个指纹的信息。在Init()函数中,所有位置0. Insert(a) 函数使用k个独立hash 函数,h1,….hk,每个函数映射指纹a 到[0,m-1]中并且设置h1(a),…hk(a)指向的位置为1。对于任何指纹x,Lookup(x)将要查询所有h1(a),…hk(a)指向的位置是否设置为1。如果所有位为0,则按定义x不在段索引中,否则,在合理选择m,n和k的条件下,x有很大可能就在段索引中。如下图2-2所示。

2-2

其中误诊率(false positive rate)我们可以直接计算出,在此不做讨论。但是如果要到达一个非常小的误诊率,比如0.x%,则在一定条件下,对于十亿个数据段来说,汇总向量需要1GB内存,这是个有待改进的地方。系统关闭时,汇总向量要写到磁盘,启动时要读到内存,同时还要设置检查点,保证汇总向量的一致性。

SISL目标在于为数据段以及段描述符创造空间局部性,以及使局部维持缓存能够更好地工作。在备份过程中,一些段可能按与另一些段非常相似的顺序再现,考虑1MB的文件,它拆分为上百个段或更多,每次这个文件被备份时,上百个段以相同的顺序再现。如果这个文件稍微改变了,但是其余的部分还是会以相同的顺序出现。当备份中出现一个段的副本x时,则在这个段的附近有很大可能性出现x 附近的重复段。这称为段重复局部性。

内容存储与段存储支持一种流抽象(stream abstraction),分离为不同对象建立的段,从而维持内容存储对象中段的局部顺序,并制定一个容器来为单个流的数据服务。当有多个流时,多个流并行写入段存储中,不同流的数据段不会写到一起,而是分别写到各自的容器中。如此一来,单个数据流的数据段总是存储在一起,他们的描述符也一起存在元数据区域,达到了很好的局部性。这种特性减少了磁盘IO,是局部维持缓存可以高效工作。这种优势使SISL可以高效的重删多数据流数据段。不同流不会在一个容器中的特点是SISL与Venti和其它系统的最大区别。

局部维持缓存(LPC)目的在于加速识别相同段的处理过程。传统缓存中指纹,hash值,或者描述符不利于重复检测,因为这些指纹基本上都是随机的。所以,很难为下一个段预测索引的局部性,从而只有实际地访问索引。传统缓存的为命中率是很高的。LPX充分利用段的重复局部性,如果一个段是重复的,而附近的段很可能就在缓存中,从而大大减少磁盘的IO次数。

2.2实验结果分析

在真实的数据世界中,这个重删存储系统表现得非常好。图2-3与图2-4展示了两个数据中心重删的结果。

部署了重删系统的数据中心A连续31天备份结构化的数据库数据,备份策略是每天全备份,每次全备份产生600GB的数据。从上图的结果中我们可以看到在第31天末,数据中心A已经备份了16.9TB的数据,但是相应的物理空间却少于440GB,达到总的压缩率为38.54:1。

数据中心B连续48天备份结构化数据库数据与非结构的文件系统数据的混合数据。与数据中心A相似,在最后一天末,逻辑容量达到41.4TB,而物理容量永乐3.0TB。总的压缩率为13.71:1。

这两个结果说明重删系统在真实环境中工作的非常好。

      

2-3:数据中心A的逻辑/物理容量:

 

2-4:数据中心B的逻辑/物理容量

 

至于为找到重复段的磁盘I/O开销上,我们可以从下图2-5中看到汇总向量与LPC的有效性。

2-5

从中可以看出使用汇总向量与LPC,可以大大减少磁盘的读操作。单独使用汇总向量对exchange 数据与Engineering数据来说分别减少16.5%与18.6%的磁盘索引查询。单独使用LPC可以分别减少82.4%与81%的磁盘索引查询。都采用的话,磁盘索引查询分别减少98.94%与99.6%。

通常,汇总向量对新数据非常有效,而LPC对稍微改动的数据发挥的效率高。在第一次的全备份中,重复数据比后一次全备份少很多,这样汇总向量,就可以避免索引查询的磁盘IO,而对于后续的全备份,LPC将发挥很大的作用。总之,结果表明这些数据集展示了很好的局部重删性能。

在吞吐量方面,重删系统维持了较高的吞吐量。单数据流的写吞吐量达到平均110MB/sec 。4个数据流的写吞吐量平均达到210MB/sec。单数据流的读吞吐量达到平均100MB/sec 。4个数据流的写吞吐量平均达到140MB/sec 以上。写吞吐量高于读吞吐量是由于,备份有时间窗口限制,重复数据不用存储等。读操作时,由于要大量检索,甚至查询磁盘,故而没有写吞吐量高。然而,读操作对于恢复来说非常重要,我们应该想一些策略提高读吞吐量。

3稀疏索引

3.1实现原理

稀疏索引方法采用一种与DDDFS中不同的方案来避免磁盘瓶颈。这种方案工作在数据流重删的背景下。其中最大特点就是比DDDFS中的方法用了更少的RAM。

这个方案同样考虑局部性。比如说上一次我们遇到块A,后面紧跟着块B,C和D,那么下一次遇到块A(即使在不同的备份中),我们也很有可能遇到块B,C和D。这不同于传统观念的局部性,由于A的再现可能应经过了很长间隔。而我们充分利用A的性质是,如果两个备份流有一些相同块,那么他们很可能有许多相同块。另外,本方案采用线内重删(Inline Deduplication),即数据在存储到磁盘前进行重删处理。相对的是线外重删(Out-of line Deduplication),它首先把数据存到磁盘,稍后进行重删。线外重删会消耗大量磁盘容量,而且难以维持网络和磁盘带宽。

如下图3-1所示,在稀疏索引方法下,数据段是存储与检索的单位。一个段由一系列块构成。数据流首先按分块算法被拆分为一系列变长数据块,然后根据分段算法把块的序列分成一系列段。段通常为MB大小数量级。如果两个段由许多相同块,就认为两个段是相似的。

存储中的段用他们的manifest来描述:一个manifest或段的描述(segment recipe)是一个允许重构它的数据块的数据结构,这些数据块分散存储在多个容器中(container),从而使两个段可以共享数据块。一个段的manifest记录它的块的序列号,每个块的hash,以及块的存储位置,也可能有快的长度。每个存储的段有一个manifest,manifest也存在磁盘上。

   

图3-1:重删过程

新来的段会基于存储中已经存在的段或者相似的段而被重删。首先,我们从所有存储的段中找到一些与新来段相似的数据段,我们称之为:champions;然后,我们找到与新来数据段中相同的数据块,并删除这些数据块而不存储。

为鉴别相似的数据段,我们对新来数据段的块hash进行抽样,然后用RAM中的索引找出那些已存的数据段包含了多少与这些相同的hash。简单而快速的抽样是选却前n位为0的hash作为样本,则平均抽样率为1/2n,即,平均2n个hash中有一个作为样本。称已被选中的hash为钩子(hook).

我们称内存中的索引(in-memory index)为稀疏索引(sparse index),它们映射钩子与manifests。这些manifests保存在磁盘中。稀疏索引保存指向它们的指针。一旦我们应经选出了champions,我们就可以加载这些manifests到RAM中,并用它们来重删新来的数据段。我们应当注意到,尽管我们选择champions是因为它们与新来的数据段有相同的钩子,考虑到块的局部性,它们很可能有很多相同的另一些数据块。

本方法在RAM和磁盘中都没有采用全部块索引,仅仅在RAM中维持的稀疏索引比全部块索引占用更少的空间。比如每128个hash中抽样一次,则稀疏索引是全索引的1/128。尽管为了加载一些champions,我们需要做少量的磁盘随机访问,但是这个代价相对于每个段中成千的数据块访问来说已经减少了很多很多,这样的带宽我们是可以接受的。

3.2实验结果分析

在实验中用到两个数据集,一个是Workgroup,采用每日增量备份,一周一次全备份的计划。试验中用3.8TB的数据量,包括154次全备份和392次增量备份。另一个数据集我们成为SMB。它包含两周(3次全备份,12增量备份)ORACLE及Exchange数据的备份。

为了验证方法的有效性,真实的备份流中应存在大量的数据局部性。

3-2:基于数据集Workgroup中先前的M个段来重删数据段,这是重删性能的保守估计(GREEDY)。

3-3:基于数据集中SMB中先前的M个段来重删数据段,这是重删性能的保守估计(GREEDY)。

在图3-2与图3-3中,我们可以看出,根据数据的局部性,基于段的重删发挥了很好的性能。我们根据重删后的重复块来测量重删的性能,数值越小,性能越好。用GREEDY算法是一种理想状态下情况,而且它消耗过多的RAM,以至于在实际中不可用。但是我们可以从中看出基于先前两个段就可以重删掉99%的重复数据,如果是3个,就可以移除99.9%的重复数据。段越大,产生的局部性就小,从而性能要低一些。

3-4

图3-4展示了利用抽样方法可以检测到的局部性程度。同时与采用GREEDY算法的结果进行了比较。从图中我们可以看出,即使一个低得抽样率如1/128,我们也可以除去只剩1.4%的重复数据。

DDDFS中采用了Bloom filter算法,而稀疏索引却使用了更少的RAM。如下图3-5所示。但是这两种方法在没有块局部性的条件下发挥的作用将大大降低:使用页全局索引(Paged Full Index)的Bloom filter算法(BFPFI)的DDDFS,其吞吐量降低,而稀疏索引重删效率降低。不像BFPFI,稀疏索引通过限定最大量的champions来维持一个最小的带宽,这在当今给定一个严格的备份窗口时间中是非常重要的。

3-5

4 Extreme Binning

4.1 实现原理

已存在的方法都是探测“块局部性”来提高重删吞吐量。Zhu et al[1]存储并预取一组块的ID,这些块很可能由于高地局部性被一同访问。Lillibridge et al[2]把大批数据块分成大段,例如10MB。每个新来的段中的块ID被用来抽样,然后与仅有的一些已经选好的备份段比较,从而进行重删。这些备份段就是那些与新来段有很多相同块的段,这个可能性很高。

如果考虑低局部性(low-locality)的备份负载。这些负载有文件组成,而不是大量的数据流,而且他们随机的从各个源到达备份中心。在这种情景下,已经存在的方法工作的很差:或者它们的吞吐率[1],或者它们重删效率[2]。

Extreme Binning方案是检测文件的相似性而不是块的局部性。如图4-1所示,它把块索引分成两部分,主部分叫做主块索引或主索引(primary index),存在RAM中,主索引包含每个文件的块ID项。这个块ID是文件的代表ID。文件的其余块ID存在磁盘上的辅助索引中,称之为bin。主索引的每个代表ID包含指向它所属bin的指针。

4-1

Extreme Binning对每个文件的块查询仅做一次磁盘访问,从而缓解了磁盘瓶颈问题。如图4-2所示,在有多个备份节点的分布式环境中,每个节点都执行基于文件的备份,而且使用状态无关的路由算法把每个新来的文件分配到一个单独的节点中。备份节点是自治的,每个节点管理它自己的索引与数据,并不共享,也不必知道其他节点的备份内容。目前来说,这个方法在并行与扩展方面做的最好。

4-2

但是与Zhu et al.[1] 的方法比起来,这个方法允许一些重复块存在。然而,这中重删的损失对于大量的负载来说微不足道,这个方法使用更好的RAM而且有扩展性,从这里可以得到补偿。

4.2 实验结果分析

从图4-3中可以发现Extreme Binning 在重删重复数据方方面做的很好。使用最好的重删,存储空间为299.35GB(空间减少比例为15.16:1),而使用Extreme Binning,存储空间为331.69GB(空间减少比例为13.68:1)。尽管Extreme Binning多用了32.3GB的空间,但是这个开销相对于4.4TB的数据来说微乎其微。

从图4-4中可以看出,多个备份节点中,各个节点都不会发生超负载现象。实际上,重删后的数据公平的分给了每个节点。这意味着对每个节点的文件分布是均匀的。Extreme Binning这个性质很重要,它可以确保稳当地扩展节点,而且可以避免任一节点成为整个系统性能的瓶颈。

4-3

4-4

5. 结论

Zhu et al.提出的方法[1]实现了重删系统的高吞吐量,并且减少了磁盘I/O次数。例如它的方法可以在多个数据流条件下达到210MB/sec 以上的写速度以及140MB/sec以上的读速度。综合利用汇总向量与LPC可以减少99%的磁盘索引。虽然这个方法提供较好的重删效率,但是利用它的缓存来有效提高吞吐量严重地依赖数据内在的局部性。它使用Bloom filter 以及缓存部分索引(index fragment),这些索引片段指向在输入中被一同建立的数据块。在缺少块局部性条件下,缓存失效,一个已存储的数据块的新版本数据每次到来都得从磁盘上读取部分索引。

稀疏索引(Sparse indexing)[2],主要为数据流而设计,它把数据流分成块,进而又分成多个兆级数量的段,然后进行抽样,用样本去查找有许多相同块的数据段。在块局部性条件下,可以获得较好的重删性能。但是,同样地,重删质量严重地依赖块的局部性。对于在很少块局部性的条件下,例如没有文件局部性,Sparse Indexing 的重删性能将不能使我们接受。另外,稀疏索引允许产生少量的重复块,但是可以通过减小块的大小提高重删性能,从而弥补这个损失。与BFPFI方法相比,稀疏索引使用更少的RAM就可以实现等级的重删水平。

Extreme Binning是一种可扩展的并行的重删技术,非常适合于低局部性的个人文件组成的工作负载的情况。Extreme Binning考虑了文件的相似性而不是块的局部性,从而对每个文件的块查询只进行一次磁盘访问,大大缓解了磁盘瓶颈问题。这与上述两个方法考虑的角度是不同的。在多个备份节点的分布式环境中,备份节点可以随时加到网络中来加大吞吐量,并且数据块的重新分布是简单的操作,因为bins或者数据块之间没有依赖性。备份节点的自治性使得数据管理任务,诸如垃圾回收,一致性检查,以及数据恢复请求等都能有效的处理好。

与稀疏索引一样,它也允许少量重复块的存在,但是这种损失可以从较少的RAM使用量以及可扩展性这些优势中得到弥补。

如果在我们的重删系统中能够及时的判别出数据是否有局部性,从而采用相应的策略,那么重删率将极大的提高。上述三种方法,本质上都是基于块的重删,只是对备份的数据以不同的形式看待。如果我们能够分别从文件级,块级以及字节级来综合考虑数据的重复删除,将会提高重删质量,当然要兼顾其他方面的性能,例如内存使用率,磁盘I/O瓶颈等。

比如Zhu et al.提出的方案中,读吞吐量少于写吞吐量,这对于数据恢复操作来说,性能不是很好,所以这是个有待进一步研究并改进的地方。

参考文献

[1] B. Zhu, K. Li, and H. Patterson, “Avoiding the disk bottleneck in the data domain deduplication file system”, in Proceedings of the Seventh USENIX Conference on File and Storage Technologies (FAST), 2008, pp. 269-282.

[2] M. Lillibridge, K. Eshghi, D.Bhagwat, V. Deolalikar, G. Trezise, and P. Campbell, “Spares Indexing: Large scale, inline deduplication using sampling and locality”, in Proceedings of the Eighth USENIX Conference on File and Storage Technologies (FAST), 2009, pp.111-123.

[3] D. Bhagwat, K. Eshghi, D. D.E. Long, M. Lillibridge, “Extreme Binning: Scalable, Parallel Deduplication for Chunk-based File Backup”, in IEEE MASCOTS, 2009, London, UK, September 21­st, 2009.

 

你可能感兴趣的:(去重与压缩)