回复:

五、延展(Striping)技术

    以上几节的内容都是讨论的技术都是关于提高数据可靠性的。不过几次提到了延展这个名词,但是并没有详细的解释。这一节的内容就是重点的介绍延展技术的。延展技术通过把数据分布到阵列的所有驱动器上——而延展技术的主要原理是并行处理。假如你在一个单独的硬盘上有个非常大的文件,如果要读取它只能从头到尾的逐一读取。而Striping技术可以把它分成小块分别存储在多个硬盘之上,读取的时候就可以从多个硬盘里同时调用。同样道理当你写入数据——特别是大文件的时候也是这样的。传输性能将能明显的提高。在一定的范围内,可以说你的硬盘越多,性能的提高就越明显。驱动器数目决定了延展带宽——可以同时用于数据传输的同步延展。不过它们究竟是怎么工作的呢?

    每一部分进入RAID控制器的数据都被分成了更小的部分。在延展技术中分割数据分为两个层次:一个是字节层延展(Byte Level Striping),一个是块层延展(Block Level Striping)。字节层延展主要用于把数据以字节为单位分割,并顺序存储在硬盘上。举个例子:如果一组数据被分割为16字节,并且要分布在4个硬盘上,那么第一个字节存储在第一个硬盘上、第二个字节存储在第二个硬盘上……而第五个字节又存到一个硬盘上,如此循环,不过缺点是每次要使用512字节的空间。块层延展以给定大小的尺寸来分割数据,其余的同字节层延展是一样的。这个块的大小称为延展容量(stripe size)。延展容量的大小依据不同的RAID实现方式来决定。

    延展容量的大小是一个很关键的课题。因为没有固定的大小是最合适的,不同的应用中应该采用不同的尺寸。延展容量对于最终性能的提高或者降低影响很明显。延展容量越小,文件被分割的就越多。传输性能将因并行处理能力的提高而提高,但是也会增加文件存储的随机性。而使用大的延展容量所取得效果同使用小的延展容量相反。数据分布和传输的性能将会减低,不过文件存放的随机性也会下降。所以要确定指定多么大的延展容量只有根据你经常使用的程序来进行试验,找出最合适的尺寸。先从中等大小开始试验,然后分别增加和减少延展容量,并对结果做出记录,比较之后就有结果了。

    上面的示意图是演示延展技术如何工作的。需要存储的数据分为了6块(A,B,C,D,E,F),需要分布到两个硬盘上——如果你要分布到多个硬盘里按照同样的规则进行就可以了。如果你需要移动、传输数据,控制器将对两个硬盘同时存取,从而提高了性能。

    六、RAID(RAID levels)的基本模式

    前面各个小节阐述了关于RAID的几个基本概念,可以帮助你更好的理解下面的内容。现在我就来介绍一下RAID的标准组成形式(RAID levels)。部分公司自己开发的RAID形式不在此列。这些只是单一的RAID形式,这些形式可以通过不同的方式组合成结构更复杂、功能更多的的RAID。后面的小节我还会谈到。

    RAID 0:

    这是最简单的RAID模式,它仅仅有延展功能而没有数据冗余功能,所以不适于数据稳定性敏感的应用。在各个单一RAID形式中它提供了最快的性能,也是造价最低的——只要两块硬盘、一个RAID控制器,不需要额外存储设备就可以了。不会因为要在硬盘上存储同样的数据而浪费空间。RAID0因为其相对低廉的造价和明显的性能提升在主流市场上已经流行起来。以前多是SCSI接口,对于个人用户价格仍然不菲,不过随着近来价格更低廉的IDE/ATA解决方案的实现,已经为很多个人用户应用了。其实RAID 0(也就是延展技术)其实是通过RAID控制器把多个硬盘当成一个容量更大、速度更快的硬盘来使用,所以最后要声明的是任何一个硬盘出问题都可能造成整个阵列的数据丢失。

    RAID 1:

    RAID 1其实就是镜像技术的实现。简单工作原理就是把相同的数据备份存放在两个驱动器,当一个驱动器出现故障,另一个仍然可以维持系统的正常运转。当然恢复故障驱动器也是非常简单的,只要把数据完好的备份拷贝到正常的硬盘上就可以了。数据冗余的换来的是数据的安全。有的RAID 1通过增加一个RAID控制器来提高容错能力。所以对于关键数据来将,这将是最好的选择。不过RAID 1对于系统的性能提高很小。它的相对低廉的价格和易用的特点使它已经成为RAID控制器的主流之一。

    RAID 2:

    利用汉明校验码(Hamming code ECC.)实现字节层延展技术。这个技术类似于奇偶校验但是并不完全相同。数据以字节为单位被分割并存储在硬盘以及ECC盘上——每当在阵列上写入数据,利用汉明校验规则生成的汉明码就写在了ECC盘,当从阵列中读取数据的时候,汉明码就被用来检验数据写入阵列之后是否被更改过。单字节的错误也能被简测出来并且立即修正过来。不过这种模式所需的RAID控制器价格昂贵,所以至今这种应用几乎没有。

    RAID 3:

    利用专门奇偶校验实现的字节层延展技术。换句话说,就是应用延展技术将数据分布到阵列的各个驱动器上,同时用专门的驱动器存储用于校验的冗余信息。这种形式的优点就是既通过延展技术提高了性能,又利用专门奇偶校验驱动器容纳冗余信息,以保证数据的安全。一般至少需要3块硬盘:两块用于延展,一块做为专门奇偶校验驱动器。不过虽然利用延展技术提高的性能,可以因为奇偶校验在写入数据时又抵消了一部分性能——因为校验信息同时也需要写入校验驱动器。因为需要进行大量的计算,所以需要硬件RAID控制器,软件RAID几乎没有什么实际意义。RAID 3因为延展容量小,所以适于经常处理大文件的应用。

    RAID 4:

    RAID 4同RAID 3很相似。唯一的区别就是使用块层延展技术(block level striping),而不是使用的字节层延展技术(byte level striping)。优点是可以通过更改延展容量大小来适用于不同应用。RAID 4也可以看作是RAID 3和RAID 5的混和——既有RAID 3专门奇偶校验驱动器,也有RAID 5的块层延展技术。另外仍然需要硬件RAID控制器。当然专门奇偶校验驱动器还是会降低一些性能。

    RAID 5:

    RAID 5使用块层延展技术和分布式奇偶校验来实现。它主要针对专门奇偶校验驱动器所带来的瓶颈而产生的解决方案。利用分布式奇偶校验运算法则,把数据和校验数据写在所有的驱动器中。本技术的要旨在于相对于块数据产生校验块(parity blocks)同时存储于阵列当中——解决了专么校验驱动器所带来的瓶颈问题。不过,校验信息是在写入过程中计算出来的,所以对于写入性能仍有影响。当一个硬盘驱动器出现故障,可以从其它的驱动器之中的数据块分离出校验信息从而恢复数据。由于分布式校验本身属性,恢复数据会比其它的形式复杂。RAID 5也可以通过更改延展容量的大小来满足不同应用的需要,另外还需要硬件RAID控制器。RAID 5是目前最流行的RAID应用形式,因为它综合最好的性能、冗余能力、存储能力为一体。当然价格也是不菲的。