1、背景
在各类存储介质中,机械磁盘由于采用了电机驱动,故障率***,平均无故障时间(MTBF)指标也***,因此磁盘的数据保护技术至关重要。
加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年,发表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中谈到了RAID这个词汇,而且定义了RAID的5层级。自1989年以来,RAID(独立磁盘冗余阵列)技术一直是磁盘系统数据保护的标准的和最常用的方式。在绝大部分用户眼中,RAID是一种成熟、可靠的解决方案,也被视为数据存储的基础技术。那些基本的RAID概念很多年都不曾改变过,至今仍然十分流行,也拥有有众多的用户。但事实上,传统的RAID技术正在逐渐被一些新的技术取代。
2、传统RAID技术的主要瓶颈
当故障发生时,根据用户使用的RAID类型,(一个或多个)故障磁盘上的数据会通过校验值计算或者从镜像盘拷贝的方式重新生成原来的数据。但是:
(1)传统RAID在数据重建方面表现比较差,以前因为单块磁盘的容量较小,当磁盘发生故障之后,数据重建需要的时间大部分用户是可以接受的,但随着数据量的不断增大,在许多应用环境中单块的磁盘容量在4TB或者以上,数据重建可能需要十几个小时,甚至几十个小时才能将故障盘中的数据恢复。这样就有一个比较大的问题,重建时间越久发生二次损坏的概率就越大,一旦发生了二次损坏很有可能会造成数据全部丢失无法恢复;
(2)比如当RAID组中某块磁盘发生故障以后,处于同一个RAID组中的其他盘将会存在大量的读操作,去获取条带数据,然后生成故障盘上的数据,***写入热备磁盘中,这是一个完整的数据重建过程。会造成若干块磁盘存在读操作,一块磁盘存在写操作。我们很容易的发现,热备盘是写操作性能瓶颈点,同时RAID组中的其他磁盘是读操作性能瓶颈点,大容量磁盘对传统RAID技术的***挑战就在于此。
另外在数据重建的过程中,上层文件系统的性能也会受到极大的影响。并且在应用数据压力的情况下,数据重建的I/O和应用的I/O交错在一起,导致恶性循环,使得数据重建和应用I/O性能都表现较差;
(3)RAID系统需要为发生故障的那个磁盘记录一系列的关联信息, 包括跟踪故障磁盘的位置、相关数据、数据位置、数据产生时间等信息的痕迹,这个时间周期从故障磁盘被拔出那一刻开始,一直到RAID组被修复(或者RAID组被毁坏)。这是一个冗长乏味的过程,如果是加密的磁盘,则还需要复杂的手工操作。
既然传统RAID技术有上述的瓶颈,那是不是用SSD硬盘就能彻底解决呢?不容置疑如果不在乎成本的因素,肯定是能解决一些问题的,但不能彻底解决,这源于机制的作用,因为传统RAID技术的机制已经非常的固化。后期在许多应用场景下可能会广泛采用混合的机制,比如采用SSD等高速硬盘用来存放热点数据,需要长期保留的大容量的数据就用大容量的普通硬盘,但同时还是都需要做数据保护的。
3、新的技术
最近几年业内兴起了许多新的技术,我个人觉得其主要思想都是将数据分割成多个等长的不能直接读取的数据块,并且在每个数据块上附加元数据信息。一份完整的数据通过全部数据块中的部分子集就可以复原,也就是说只要有部分数据块存在,数据就不会丢失。这些数据块可以分布在不同的存储位置,可以是一个数据中心内部,甚至可以跨越城市、跨越一个地区,或者在世界上任何其他地方,形成一个逻辑的资源池。在数据重建时数据写入操作不再局限在一块磁盘上面,而在逻辑的存储池中任意布局,相应的重建需要的数据块读操作也不再局限在一个RAID组中了,而且根本不需要数据的复制操作。面对自然灾难以及技术错误时具有很强的生存适应能力,因为只要有部分数据块存在,就能复原完整的原始数据。实际上,即使客户端、服务器、存储单元,磁盘驱动器或者网络这一些列环节中同时发生多个故障,我们仍然可以实时访问数据。与传统RAID的存储机制完全不同,可以完全消除和弥补传统RAID技术的不足。
另外这种机制天生具有数据的私密性,因为每个独立数据块所包含的信息量都不足以揭示原始数据集的全貌。必须有足够数量的数据块集合(可能来自于不同的存储节点设备)才能恢复完整的数据,这个数量由附加在每个数据块上的元数据信息量决定。附加的元数据信息越多,意味着恢复时需要的数据块就越少。
当然说不定随着技术的发展会有更好的解决方案出现,让我们拭目以待吧!