众所周知,传统RAID在数据重构方面表现极差,当一块盘发生故障之后,需要几十个小时才能将故障盘中的数据恢复。特别在数据重构的过程中,上层文件系统的性能也会受到极大的影响。并且在应用数据压力的情况下,数据重构的IO和应用的IO交错在一起,导致恶性循环,使得数据重构和应用IO性能都表现极差。
大容量磁盘对传统RAID的最大挑战就在于此。两年前或者更早,存储界的很多公司开始寻找下一代磁盘RAID的技术,其中最有可能和新意的就是DDP(Dynamic Disk Pool),国内的华为将这种技术称之为RAID2.0。DDP最大的特征在于将RAID构建在一系列随意的CHUNK之上,而不是将若干个磁盘做成RAID。这些CHUNK是磁盘中的资源块,可以是1GB或者更大的容量。在DDP中普遍会存在Storage Pool的概念,这个概念会将这些CHUNK资源块组织起来,池化。在这个池中通过一定的算法获取一些资源块CHUNK,然后在这些CHUNK的基础上组建RAID。目前,应该有很多的存储公司都在研发这种新型的RAID。咋看一眼,这种技术好像很简单,其实在现象的表面隐藏了很多的技术问题,并且不是很容易解决的。
本文不想过多的讨论DDP的技术细节,最主要想讨论一下为什么采用DDP就能解决传统磁盘RAID的问题,到底磁盘RAID的性能瓶颈点在哪里?为了分析得出这个问题的答案,先来看一下磁盘RAID数据重构的过程。
当一块磁盘发生故障以后,处于同一个Disk Group中的其他盘将会存在大量的读操作,去获取条带数据,然后生成故障盘上的数据,最后写入Spare盘。这是一个完整的数据重构过程。所有的读发生在故障盘所处的Disk Group中,写操作只存在Spare上。因此,我们很容易的发现两个性能瓶颈点:Spare盘是写操作性能瓶颈点。如果单盘写入,那么对于SAS盘,其最大的写入带宽可以达到130MB/s左右。
Disk Group中的幸存盘是读操作性能瓶颈点。由于所有的数据都是从一个Disk Group中的幸存盘上读取,所以,条带的最大读取带宽只能达到130MB/s左右。由于上述两大性能瓶颈点的存在,传统RAID的数据重构带宽理论上限只能达到130MB/s。要想突破这个理论上限值,只能破除这两个性能瓶颈点。
DDP就能破除这两个性能瓶颈点。为什么呢?因为DDP是基于CHUNK来做RAID的,CHUNK又是从一个Storage Pool中获取的。因此,RAID中的CHUNK在磁盘上的布局不再像传统RAID的Disk Group那样非常的规整。也就是说,DDP可以达到:Spare CHUNK的数据写入操作不再局限在一块盘上面,而是可以在整个Storage Pool中任意布局。这样,就不再存在单盘写入性能瓶颈的问题了
重构条带数据读操作也不再局限在一个Disk Pool中了,而是分布在整个Storage Pool上,当Storage Pool中的磁盘数量足够多时,条带读性能将不再局限在单盘性能上了
通过上述两点,DDP完全破除了传统RAID的两大性能瓶颈点,从而可以使得数据重构的性能大幅度提升。下图就是采用DDP技术之后,每块磁盘上的读写IO分布。
在数据重构的过程中,每块磁盘上同时存在读和写操作,而不像传统RAID那样,只有若干块盘存在读操作,一块盘存在写操作。并且由于读写混合之后,磁盘会存在抖动,因此,从单盘的角度来看,无论是读还是写操作性能都大大降低了。但是,从总体来看,由于参与数据重构的磁盘数量增加了,因此,总体的数据重构性能增强了。从这句话里我们也可以理解出来,DDP技术的应用是有局限的,当磁盘数量不是很多的情况下,DDP技术无法发挥性能优势,发而会导致性能下降。当前,SSD技术正在悄然兴起,并且其没有读写混合的性能问题,因此, DDP技术在SSD上面就显得非常合适了。
引入DDP技术之后最大的好处是可以提升RAID的数据重构性能,并且可以做到随者系统中磁盘数量的增加,数据重构性能可以线性扩展。而传统的RAID是没有办法做到这一点的。