dedup已经被广泛应用于二级存储系统(备份、归档:高冗余、高吞吐率、延迟不敏感、写多读少);但是主存储系统(低冗余、延迟敏感、读多)仍然很少采用dedup,虽然已有一些尝试(iDedup、ZFS、opendedup等)。我们从成本的角度来分析这个问题。
dedup的目的是节约成本:节约的是磁盘的成本,当重删率(
=原始数据大小/重删后的数据大小)达到10倍时,意味着原来需要10块磁盘的数据,现在只要1块磁盘了。另一方面,dedup会增加内存的成本,因为它需要额外维护一个称为指纹索引的内存数据结构(将索引放在磁盘会导致磁盘瓶颈问题)。因此,dedup最终能节约多少成本,等于节约的磁盘成本减去增加的内存成本。
节约的磁盘成本由数据的冗余度决定;增加的内存成本由唯一数据块(unique chunks)的数量决定。假设,我们有1TB的唯一数据,平均块长是4KB,每个数据块需要在指纹索引中花掉32个字节。那么整个指纹索引大概需要8Gb的内存。磁盘和内存的所需容量比例是128:1。
我查了一下2013年5月20日京东商城的磁盘和内存价格。一块1TB、7200rpm的希捷ST1000DM003磁盘需要438块钱,而kingston DDR3 1600的每GB价格是50块。磁盘和内存的每GB价格比是1:117。
这意味着一个dedup存储系统,它的磁盘成本和内存成本接近1:1的关系。当系统的整体重删率达到2倍时,dedup存储系统的成本恰好等于非dedup存储系统。只有当重删率超过2倍时,dedup才能真正的节约成本。
A study of practical deduplication(FAST’11)这篇文章分析了857个文件系统的重删率。它的实验表明,块级全局重删可以获得3倍的重删率。这意味着primary dedup是可以节约成本的。这种环境下:非dedup系统,每3TB逻辑数据的成本是¥1314;而在dedup系统里,每3TB逻辑数据的成本是438+400=¥838。每存储1TB的逻辑数据,dedup可以节约476块钱。
在实际的系统里,我们还必须考虑dedup对读写延迟、吞吐率的影响。为了进一步节约成本,一些解决方案可能会设计非完美重删,减少索引的开销,同时获得与完美重删可比较的重删率。