内容导航
三.应急之策——RAID 0
既然单凭硬盘厂商无法从内部解决磁盘传输瓶颈问题,那么就只能从外部想办法了。为此,人们采取了多种措施。1988年,美国加州大学伯克利分校的D.A.Patterson教授提出的廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks,简称RAID)有效地解决了这个问题,简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据冗余的技术。根据RAID所采用的方法不同,可以将其分为许多种。这里我们只介绍能够大幅提高硬盘传输速率的一种——RAID 0:
RAID 0的工作原理为:当主机要求写入数据时,RAID控制器把即将进入硬盘的数据分成许多块,然后并行地将它们写到磁盘阵列中的各个硬盘上;当读出数据时,RAID控制器从各个硬盘上同时读取数据,把这些数据经过处理后恢复为原来顺序传给主机。这种方法的优点是采用数据分块、并行传送方式,能够极大的提高主机读写速度,并且磁盘阵列中存储空间没有冗余。如果采用N(N>1)块硬盘组成RAID 0系统,那么它可以在不牺牲硬盘容量的前提下达到理论上N倍于原来单个硬盘的读写速度!这样就可以极大的提升磁盘子系统的性能,以缓解燃眉之急。
由上可以看出RAID 0系统所带来的性能的提升是我们急切渴望得到的。但是RAID 0也并不是没有缺点的:
① .需要至少两块硬盘,这无疑加重了用户的负担;
② .需要附加控制器RAID卡的支持;
③ .RAID 0系统所带来的高发热、高噪音、高电能消耗都给用户带来了安装、控制和维护的不便;
④ .其致命的缺点就是稳定性差——一旦组成RAID 0系统的硬盘中有一块出错损坏,那么将全盘皆毁,给系统带来灾难性的损失。
对于不惜代价追求硬盘高容量和急速 的服务器来说① ② ③ 项显得微不足道,可以忽略不计,但 ④ 的存在使得服务器也不能安安稳稳的享用RAID 0带来的高磁盘性能。
那么,如果我们能够消灭RAID 0系统所带来的所有缺点而仅保留其优点,那么磁盘系统的瓶颈将不复存在!那么这样的硬盘系统必将具备以下的条件:
① .只需要一块硬盘,安装、控制、维护简单;
② .极大的提高硬盘的传输速度(与原来的硬盘相比较);
③ .不牺牲硬盘容量;
④ .不需要附加控制卡的支持;
⑤ .不降低其稳定性。
听起来很美,但能否实现呢?请看:
四. 硬盘的结构带来的思考
先来看看硬盘的内部结构,如图1所示:

图1 硬盘的内部结构
硬盘在读写数据时,电机带动盘片高速旋转,磁臂带动磁头沿盘片径向移动,凡是磁头扫过的区域都可进行读写操作。现在的硬盘大多是由多个盘片和多个磁头组成的。目前主流的硬盘为单碟40GB,那么40GB的硬盘就有一个双面盘片和两个磁头(正反两面各一个),60GB的硬盘由两个盘片,一个双面一个单面,和三个磁头……以此类推。
但是一般来说,磁盘在存储数据时,是连续分布的,即在当前位置的磁道写满之后才转入下一个磁道,除非出现磁盘碎片。因此,在读写具体的某个文件时,只有一个磁头在进行读写操作,其余的磁头虽然也在跟着移动,但不进行任何操作。当磁盘要执行多个任务时,举个例子:当第一个磁头正在连续读取数据1(假设其物理位置在硬盘第一个盘片的正面)时,系统发出请求要求读取另一个数据2,这时第一个磁头就必须暂停当前对数据1的读写操作,从而寻找数据2。注意硬盘的各个磁头是由同一个磁臂所控制,因此他们每时每刻都在相同的位置。
由此我们可以联想到,假如此时数据2在硬盘上的物理位置正好位于第一个盘片的反面与数据1相同的位置,此时硬盘的磁头就没必要进行寻道工作,也没有必要停止当前对数据1的读取工作,就可以执行对数据2的读取工作。也就是说,此时硬盘的两个磁头在同时进行读取工作!这样的话,此时其内部数据传输率将达到其标准的两倍!同理,在我们要同时拷贝两个文件时,硬盘的控制电路可以让这两个文件写入同一个盘片正反两面的相同位置,这样就可以同时让两个磁头进行写入操作,极大地提高了磁头的利用率。当然这只是十分极端的情况,在实际应用中这种情形根本不可能出现,况且我们对硬盘的内部具体读写工作方式并不了解,硬盘能否在同一时刻让两个磁头同时工作还是个未知数。不过我们可以肯定的是:如果能够对硬盘控制电路重新设计,从而能够做到硬盘的所有磁头能够同时进行工作,那么上面的猜想也不是没可能实现。