分享

关于“重复数据删除”技术,你还需要知道这些

 yi321yi 2020-05-05

重复数据删除(De-duplication),简称“去重”,是主流的存储技术之一,通过对比校验技术删除存储设备上重复的数据,只保留其中一份,从而消除冗余数据,优化存储设备的物理空间,从而满足日益增长的数据存储需求。

经过近些年的发展,重复数据删除技术已经很成熟,本文整理了部分知识,有助于大家进一步了解重复数据删除。

一、重复数据删除技术的价值

虽然存储介质的价格已经非常廉价,但若能在有限的存储介质上实现更高的存储效率,何乐而不为呢?此外,重复数据删除技术最大的一个收益点是能降低备份大数据量时对各资源的消耗和依赖。巨量数据的备份不论对生产系统还是备份系统都是一个不小的冲击,况且随着系统的发展,备份系统越来越大,备份的数据越来越多,备份的计划与安排越来越受制于备份数据量的规模。重复数据删除技术提供了一个物美价廉的解决方案,更提高了整个系统的效率。

也许在很多不太关注重复数据删除技术的工程师心中,重复数据还是那个效率低、成本高的空壳子,但实际上重复数据删除技术早已发展到了一个新的高度。借个人实施经历中一个真实的案例,看看现如今的重复数据删除技术的性能:一台Windows虚拟机存储着490 GB(有效数据)非结构化文件(文件主要为word/Excel/PPT/PDF等),日变化量大约15 GB/DAY,虚拟机的配置为2 * 2.8 GHz CPU,8 GB内存,千兆网卡。部署了一套源端、在线、基于CPU-内存的重复数据删除备份(重复数据删除设备并非物理机而是虚拟机),所有配置均采用默认配置、不作定制优化。首次备份耗时35 min,消重效率87%,消重时CPU消耗上涨5%,内存占用小于200MB,网络负载约3 MB/S左右。第二次备份耗时19min,消重效率98%,CPU、内存消耗与首次备份差不多,但网络负载明显下降,偶尔占用1~2MB/S。(@Li Fei 某保险公司 系统架构师)

二、主流几种重复数据删除技术

重复数据删除已经不是一个新的话题了,如今各个厂商的存储或备份产品都有这项功能。不过,当我们在说重删时,我们是在说同一个重删吗?关于重删,其实还有很多细微的差别,今天小编就来讲一讲。

所谓重复数据删除,顾名思义,就是要把一些具有重复性的数据删除掉。重删是一个过程,其基本方法是通过算法,把一个文件切割成不同的小块,这些切割后小数据文件切片有很多是相同的,在真正在保存的时候,我们只要保存不同的数据块的一份,这是任何一个重复数据删除算法的根基。


不过,在这根基之上却有很多种重删。

首先最简单的是文件级重删,这实际上可以不认为是一个重复数据删除,它只是一个重复数据忽略,因为它只会在文件级别进行扫描,比如文件的特性、文件的修改时间,保证每次只备份同一个文件。如果说这个文件做了一些小的修改,整个文件还是需要备份的,所以它的力度是非常低的。

接下来是块级重删,也就是之前讲的先要通过一个算法,把文件进行切割,切割成一个一个小的块,然后每个块进行比对。比对过后,只有不同的块才会被分走,这样可以保证重复数据会在子文件级进行相应的删除,从而提高每个文件相同的比率。然后被切割的这个文件,我们再附上一组指针表。这个指针图表上列出文件是由哪些小的块组成的,保证我们在还原的时候,通过这个基因图和相应的数据块,可以恢复任何的文件。

那么怎么样可以提高我们的重复数据删除率呢?就是这个块的大小,块切得越小,相应的重复数据就越多。比如我们切一个西瓜,西瓜上有很多西瓜子,把西瓜切得越小块,没有西瓜子的块就会越多。对重删来说这就是算法,而算法主要分两类:

定长重删。数据按照固定长度进行分块,之后进行重删。例如一个文件大小为128M,按照128K来切,切完就是一千份的子文件,然后对这一千份进行对比,把重复数据去掉就是定长重删。

变长重删。数据被划分成不同大小的块进行重删,一般来说变长重删可以获得更好的重删效果,因为对企业来说数据是不断更新的。比如定长重删下数据被切割形成一系列字母组合,由于数据变化插入了一个字母,因此整个数据的顺序就改变了,再按照128K切的话,对于备份软件来说所有行都是一个全新的数据块,所以要重新做备份。而变长重删可以保证其余的数据块不变,只在新增字母的块增加一个大小上限就可以了,因此变长重删效率更高。

按照重删处理的位置,这里也可以分为两类:

源端重删。在备份的时候,在备份端上agent就有重复数据删除的算法和功能,它可以在备份以前进行相应的切割和对比,只把一些新变化的数据传送到备份服务器上,这样可以大大降低备份数据量,在网络传输过程中的数据量也降低,这样可以降低整个备份网络的带宽要求,对企业来说也可以减少日常运维成本。

目标端重删。直接将数据传输到相应的磁带设备、磁带库或者是虚拟带库上,在目标端进行重复数据删除的算法、对比,然后把一些相应新的数据块元素和指针表也保留下来。

还有按照数据的重删执行的时间进行分类:

在线重删。备份的时候先做重复数据删除,在数据存储到硬盘之前,重复数据已经被去除掉了。

后重删指的是在写到存储设备的同时不进行重删处理,先把原始数据写到硬盘上,随后启动后台进程对这些原始数据进行重删处理。与在线重删相比较,后重删需要更高的硬盘性能,需要更多的硬盘数量,并且在线重删可以大大降低数据的备份量和网络带宽的需求,因此效率更高。

三、如何进行相关技术的选择?

1,在线?离线?

在线消重,顾名思义是在备份时就进行消重,落盘到备份存储介质的数据都是经过消重处理的数据。离线消重,是指数据备份到备份存储后再进行消重。

如果在线消重要保持一个高效性能,这就消耗备份系统以及宿主机一部分资源。在线消重技术发展初期,硬件与软件的契合度并不高,导致在线消重备份时需要消耗相当一部分宿主机资源、拉低备份性能。同时重复数据删除技术雏形期,主要以类HASH链表式的消重手段为主,链表式消重技术对主机计算资源与后端存储、备份介质都有一定要求,且HASH链表越长消重越慢。因此,重复数据删除技术在初期并不被人看好。

2,源端消重?目标端消重?

源端消重,是指备份软件在客户端上获取到备份数据时就开始消重过程,在备份系统内传输的数据均是消重后的数据。源端消重技术由于需要在备份时进行消重,因而需要占用宿主机一部分资源来执行消重。

目标端消重,是指备份软件已经备份到备份存储,在数据缓存到备份存储里或已存储到备份存储上再进行消重过程。目标端消重技术已在重复数据删除的发展历程上辉煌过一段时间,因为此技术不会消耗源端资源同时也不会降低备份性能,目标端消重性能完全依赖备份存储自身资源和效率。

3,基于类HASH链表式消重?基于CPU-内存式消重?

类HASH链表式消重是重复数据删除技术发展史上的一大核心技术,即使在今天也占有一定市场。HASH链表式消重,实现方式是将数据切片,然后计算出每块数据片的HASH值之类能唯一标记该数据片的索引值,若在消重的唯一索引链表上命中,则消重。若没有命中则更新索引链表,将数据片经过处理后存储在备份介质上。熟悉了链表式消重的过程,可以很清楚的知道这种技术的弊端就是当索引表非常长后,消重效率会越来越低。

基于CPU-内存式消重技术。在发展初期,CPU的性能和内存的大小处处受限,这种技术的发展左右碰壁。但经过摩尔定律的驱使,现在的CPU和内存已经取得卓越的性能,基于CPU-内存式消重技术取得了相当不错的成绩。与类HASH链表式消重不同的是,该技术在消重前会将唯一索引链表直接加载进内存,消重时会直接将备份数据加载到内存,切片,计算每个数据片索引值,然后完成索引值对比、更新,最后处理数据、存储。几乎整个重复数据删除过程都在CPU和内存中完成,现在CPU和内存的处理效率远比数据在磁盘上流动的效率高。经过长时间的发展,基于CPU-内存的消重算法已经臻于完善,对CPU和内存的利用效率完全满足商业标准。现在此种技术已经升级,不仅仅可以基于LAN进行消重备份,而且能支持基于SAN的消重备份了。不得不说,基于CPU-内存式消重技术早已不是当年“吴下阿蒙”。

4,定长消重?可变长消重?

影响重复数据删除效率的核心因素之一便是消重切片过程中的切片精度。显而易见,若是切片精度越高,那么数据片重复命中率越高,消重效率越好。若对于不同长度的数据片能够动态调整切片精度,适应每份备份数据的情况,那么消重效率更加高效。现在定长消重的精度范围主流水平约在6K或8K(min)、16K(max)左右,可变长消重的精度范围现已突破到4K(min)、16K(max)。(@Li Fei 某保险公司 系统架构师)

但是个人比较喜欢源端去重,现在目标端去重要么硬件厂商已经做了(各种虚拟带库),要么只支持磁盘类型的,对磁带设备兼容不好。

源端去重相比会消耗额外的资源,但现在基本都性能过剩,并且去重后的数据量减少适应的场景更多,比如远端复制。(@王巧雷  系统工程师)

能用源端尽量用源端,搭配OST设备和万兆网,扁平化传统备份架构,实现去SAN化和驱动器化。(@sam_8286 系统工程师)

我来泼一盆冷水,这是一项看上去很美的技术,但是开启重复数据删除功能会占用大量CPU资源,影响整体存储的IO性能,现今磁盘容量快速增长,价格快速下降,重复数据删除带来的存储空间利用率的优势很快就被抵消掉了。所以只有极少量的场景需要重复数据删除功能,一般情况还是别折腾了~~(@yhsih 某烟草公司 系统运维工程师)

不论是目标端重删还是源端重删,主要根据你的应用来选择,比如说海量数据的备份,你就可以选择源端重删,可以节省带宽,缩短备份窗口;如果你使用归档可以用目标端重删;如果您还要关注性能可以用目标端离线重删,如果对性能要求不高,可以采用目标端在线重删。(@Laozhao)

四、重删功能在全闪存阵列中有何意义?

重删功能主要是解决闪存SSD寿命较短的问题。闪存SSD的数据写入和更新是电子式擦除方式,必然带来数据块的频繁擦除动作,而数据块的擦除是有次数限制的,所以寿命自然不长,寿命到了,数据块也就无法使用了,无法使用的数据块达到一定程度时,整个SSD盘也就寿命到期了,需要更换。

而重删功能,可以在数据写入或者擦除数据块时,在闪存的软件层,就判断了是否要写入该数据。如果写入的数据是重复的,就不再写入,这样自然降低了数据块的擦除频率,提升了SSD盘的寿命,另外也大大提升了闪存阵列的利用率,虚拟容量也提升了好几倍。

当然类似的提升SSD寿命的方式还有数据压缩功能。这里不再赘述。(@邓毓 某农信 系统工程师)

要看全闪存要支持的业务类型是什么。如果上层业务系统是类似虚拟机,VDI等环境,会产生很多重复的虚拟机资源,那么重删是很有用的。

如果支持是像数据库类型或文件系统类型的业务,重删用处不大,反而需要压缩功能。(@ZhuJun2014  存储工程师)

以上内容来自社区会员分享及网络内容整理

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多