1、基于阵列控制卡技术的存储器的设计思想
存储器,首先是要能够做到保护数据,保护数据的方法在存储专业术语中叫做RAID,RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。简单来讲就是将N个硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用。基于不同的架构的RAID 种类又可以细分为: 软件RAID ,硬件RAID 卡和外置式RAID存储器。6 U' i4 P {( w4 @
1.1、软件RAID
软件RAID很多情况下已经包含在主机系统中,并成为其中一个功能,如 Windows、Netware及Linux和各种UNIX系统。软件RAID中的所有操作皆由中央处理器负责,所以系统资源的利用率会很高,从而使系统性能降低。软件RAID是不需要另外添加任何硬件设备,因为它是靠主机系统—主要是中央处理器的功能—提供所有现成的资源。
比如在开篇中我提到的在SUN服务器上连接的A1000系列和A3000系列磁盘柜,这些磁盘柜严格来讲不属于磁盘阵列,只能称之为JBOD,全称为Just Bundle Of Disks译成中文可以是"简单磁盘捆绑"或者“磁盘簇”,通常又称为Span。 JBOD 本身不能提供标准的RAID级别数据保护。因此当磁盘柜接入到主机后需要花些功夫配置软件RAID。早期的HP的DS2300、DS2405磁盘柜、MSA1000系列的扩展磁盘柜,SGI的TP9000磁盘柜都是常见的需要软件RAID配合才能实现数据保护功能的JBOD。
软件RAID的最大优势在于由于不需要购买单独的磁盘阵列控制器而只需要采用廉价的JBOD磁盘柜从而大大节约了成本。但一般概念上,由于写操作需要耗费大量的RAID计算资源,软件RAID的性能是难以保证的,因此在高性能的计算环境中极少推荐使用软件RAID技术来保护数据而多推荐独立的磁盘阵列,至少也是采用硬件RAID卡。
但也有个别情况例外,那就是对于视频点播服务器的文件存储,笔者在2000年早期曾做过不少视频服务器的项目,很多时候整体性能的瓶颈都是出在IO通道上面:如果不用RAID保护而仅仅在JBOD上做条带化打散的确能够很好地提升吞吐量,可是数据往往得不到保护,且这种环境下如果损坏一块磁盘其后果往往是致命的(因为这块磁盘上可能存放在很多视频文件的不同小片断)。当时这个问题很难解决,而早期Oracle发布过一款非常优秀的视频服务器OVS(Oracle Video Server)却很受欢迎,除了OVS其精妙的软件体系结构设计以外,另外一个独到的特点就是这个视频服务器软件提供一个叫作Oracle Video File System的东东,在软件层做RAID 5,既提升了磁盘顺序IO的性能,又很大程度上节约了成本(当然如果你银子有多,一定要把OVS的视频文件存储在独立的磁盘阵列上OVS也不反对了)。 为什么这个时候的软件RAID就不会成为性能瓶颈呢?其主要原因是因为视频服务器对于视频存储的应用特点决定的,视频点播的文件的特点是大吞吐量的顺序传输,这些视频文件在导入到视频服务器后极少会有修改(大家在互动电视上点播一个电影100次也无法做到把里面某个片断修改掉),在很多情况下一个完全条带话的JBOD磁盘柜的顺序吞吐能力可以达到线速(即如果该磁盘柜有N块磁盘,每块磁盘的顺序吞吐能力为100MB/sec,那么该磁盘柜最大能够提供接近N*100MB/sec的吞吐量,而即使是具有高处理器和大缓存的的高端磁盘阵列的RAID控制器也很难做到这点)。而且这种业务的特点几乎碰到相对软件RAID最头痛的离散IO写操作。
由于视频服务器往往是一批批地往一个个目录灌大容量的视频文件,然后再对外提供点播功能(这样产生了高效率的批量软件RAID 5的计算,对主机系统影响相对较小),而且聪明的系统管理员往往可以选择在业务量不大的时候逐步灌入视频文件以错开高峰时刻。基于以上原因,软件RAID的确是非常适用于OVS(Oracle Video Server)这款视频服务器应用的。只可惜2002年后Oracle逐步淡出了视频点播服务器市场,把OVS卖给了一家叫Thridspace的公司,几年前我再输入www.thirdsapce.tv,发现此网址已经消失得无影无踪 基于以上原因可以进一步证明,对于存储来说,没有主机(或者说不了���主机应用)是万万不能的,正确地配置和选择存储器技术对于IT系统部署非常重要。 |* Q/ `8 t4 Q/ q4 y( [
: Y, C, F2 Y8 h2 硬件RAID卡5 m4 J, F5 R/ [. |
硬件RAID卡通常是一张PCI卡,你会看到在这卡上会有处理器及内存。因为这卡上的处理器已经可以提供一切RAID所需要的资源,所以不会占用系统资源,从而令系统的表现可以大大提升,这个设计思想在网卡方面也能经常看到,比如有款叫Alacritech的高性能网卡,其在网卡上集成了特殊的处理器来处理TCP/IP拆解包的工作,帮助主机减轻工作压力,我们称之为TOE(TCP/IP offload Engine)。硬件RAID的应用之一是可以连接内置硬盘、热插拔背板或外置存储设备。无论连接何种硬盘,控制权都是在RAID卡上,亦即是由主机系统所操控。在系统里,硬件RAID PCI卡通常都需要安驱动程序,否则系统会拒绝支持。磁盘阵列可以在安装系统之前或之后产生,系统会视之为一个(大型)硬盘,而它具有容错及冗余的功能。磁盘阵列不单只可以加入一个现成的系统,它更可以支持容量扩展,方法也很简单,只需要加入一个新的硬盘并执行一些简单的指令,系统便可以实时利用这新加的容量。
为了提高性能,很多硬件RAID卡上会配置额外的内存(我们也称之为缓存),这些内存的作用是为了加速IO处理,对于读写操作都是很有好处的。对于读IO的好处在于硬件RAID卡上的缓存可以存放很多被频繁读写的数据,这样当下一次需要在读写这些热点数据时,不需要重新从磁盘柜的众多磁盘中再去寻找,然后在磁盘层寻道定位,而只需要在缓存中直接获得,极大程度上加快了读IO的响应速度。对于写IO的好处在于:试想一下主机将一个IO写到硬件RAID卡内存后就直接IO complete,其速度肯定将远远高于直接写到磁盘上硬盘上的速度,同样也避免了硬盘的寻道定位时间。
当然对于写IO来将需要考虑另外一个问题那就是硬件RAID卡上的内存需要带电池保护,否则会单主机出现故障后,很多只写入到硬件RAID内存里面而尚未写到磁盘里面的数据将会丢失,面临数据不一致的危险,这是作为存储器首先需要避免的。因此只有具备电池保护的硬件RAID卡能够同时实现读写IO加速功能,反之只能实现读IO加速功能。* T2 G+ @$ c/ T/ H$ y.
1.3 外置式RAID存储器! \' }5 {, L' S/ |% ~% z, e
外置式RAID也是属于硬件RAID的一种,区别在于RAID卡不会安装在系统里,而是安装在外置的存储设备内。而这个外置的储存设备则会连接到系统的SCSI卡上。系统没有任何的RAID功能, 因为它只有一张SCSI卡;所有的RAID功能将会移到这个外置存储里。好处是外置的存储往往可以连接更多的硬盘,不会受系统机箱的大小所影响。而一些高级的技术,如双机容错,是需要多个服务器外连到一个外置储存上,以提供容错能力.外置式RAID的应用之一是可以安装任何的操作系统,因此是与操作系统无关的。为什么呢?因为在系统里只存在一张SCSI卡(或者说是FC光纤卡),并不���RAID卡。而对于这个系统及这张SCSI卡(或者说是FC光纤卡)来说,这个外置式的RAID只是一个大型硬盘,并不是什么特别的设备,所以这个外置式的RAID可以安装任何的操作系统。唯一的要求就是你用的这张SCSI卡在这个操作系统要安装驱动程序。4 D$ {: H9 Y# L' I* ^+ a
表面上来看,外置式RAID仅仅是把RAID卡安装在外置的存储设备上没什么大变化,但其实这种方法还是带来了不少进步和便利。首先是可以提高存储系统的稳定性,因为外置的存储设备上可以配置不止一块RAID卡,这样当一块RAID卡出现问题以后,另外一块可以顶上来,进一步提高了系统的可用性;第二点是增加了可以连接性,外置式RAID存储器把RAID保护的功能从主机端转移出来独立存在,这样就可以支持更多台主机同时连接到这台存储器上;第三点是增加了对于集群的支持,这一点是非常重要的,因为如果单单一块具有缓存带电保护的硬件RAID卡在所连接的主机意外down机后,即使缓存上的电池能够保护那些已经写入到缓存但还没有写入到磁盘里面的数据不丢失,但你也很难做到把这块卡从原来的主机上拔出来然后插到另外一台主机上去且保证数据不丢失。9 o# e/ h" {" M8 R: ~# V2 o4 T9 q+ F
从以上三点分析得知,外置式RAID存储器比起硬件RAID卡具备了非常大的进步,也是独立存储器产生的雏形产品,因此我把具备这种架构的存储器称为基于阵列卡技术的低端存储器(或者说是入门级存储器)。