擦除码是前向纠错(FEC)技术的一种形式,FEC已经有几十年的历史,现在出现了一种新兴高容量存储系统解决RAID的限制。
RAID并不是为保护TB级硬盘上的数据设计的,因为RAID诞生时1GB硬盘都很少见,其基本思想是将数据分散放在多个硬盘上,任一硬盘出现故障都不会导致数据丢失。
对高密度硬盘上的数据执行保护复杂性更高,在过去20年里,硬盘密度增长次数超过了2万次,现在市场上已经出现2TB和3TB硬盘,硬盘成本也变得令人难以置信的实惠:一块2TB大小的SATA硬盘不过100美元左右。
这些高密度硬盘提供极具吸引力的性价比,使在传统旋转介质上存储海量数据成为可能。
但是,使用1TB和2TB硬盘组成的RAID阵列更容易造成数据丢失,因为其重建过程很长,有时需要1天甚至更长时间。
随着硬盘密度的增长,重建时间完全有可能达到数周,这是不可接受的,根据硬盘年故障率3%估算,有些用户将会在正常业务时间体会到RAID重建带来的影响。
为此,RAID 6渐渐受到人们的青睐,因为它允许两块硬盘同时发生故障。
在RAID 5阵列中,只允许一块硬盘失效,显然,在这种情况下进行重建是非常耗时的,如果遇到不可恢复的读取错误,数据就是丢失,对未做灾备的企业来说,这无疑是企业的大灾难。
擦除码
擦除码使数据被分成多个数据包,与额外的信息位编码,发送给接收者,接收者再编码并重新封装成原始数据,如果在传输阶段数据包丢失,接收者可以重新封装数据,也就是说,接收者有原始数据包的子集。
伴随CD,DVD和蓝光光盘的问世,存储介质出现了擦除码技术,即使媒介表面出现划痕,仍然可以播放,大多数常见的擦除码算法已经演变为上世纪60年代麻省理工学院林肯实验室开发的Reed-Solomon码。
纯擦除码算法的使用使得RAID 6阵列可以失效两块以上的硬盘,保护力度更强了,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。
例如,管理员选择16块硬盘中的4块可以失效,30块硬盘允许10块失效,使RAID阵列一直以来人们关心的问题变得不再那么重要。
结合擦除码和编码数据的分布,存储持久性变得更好,数据被分解到一系列数据块上,然后在这些数据块上应用擦除码机制,生产大量的编码检查块。
编码检查快然后被分散到存储系统的多块硬盘上,因此一或多个检查块丢失,存储系统仍然可以成功检索和解码原始数据块,进而重建数据。
更重要的是,我们不仅需要数据的持久性,也要底层存储的效率,已经有多款商用存储提供了传统的擦除码技术,现在出现了一些新的变种,如喷泉码,飓风码或在线擦除码。
每一种擦除码技术在保护数据方面都有自己的优势,有些甚至实现了全自动化,提供了非常高水平的存储持久性,数据丢失的几率小于(1×10-9)%。
云存储环境常用的一种方法是将文件保存多份,大多数云存储提供商都声称保留了3份,但它仍然不能提供高水平的存储持久性,如3份拷贝所在的介质全部发生故障,数据仍然面临丢失的风险。
如果云存储提供商只需用准备300TB的存储容量,问题倒不大,但如果要准备100PB呢,岂不是要300PB,这种架构的成本实际上已经远远超出了RAID 6镜像的成本。
借助擦除码技术,使用相对较低的存储开销,就可以实现良好的存储持久性,选择16块硬盘允许4块失效的策略,需用60%的开销,换句话说,每PB可用容量需用1.6PB原始容量。
从运营角度来看,与传统技术相比,这种方法可以大大节省成本,使用擦除码技术的存储系统可以利用高密度硬盘提供更经济的数据存储服务,存储可靠性和持久性也更好。