视频服务器的存储结构
大的流媒体服务系统应具备1,000~10,000小时的节目存储量,某些应用,如nCUBE公司最近推出个人录像机(PVR)服务,则要求服务器能达到100,000小时存储能力,若系统容量为100,000小时,不考虑差错控制产生的存储开销,采用MPEG-2方式以3M流存储,则净存储数据为140TB ,这是相当大的数据量,截止到2001年6月,还没有一家数据存储厂商能解决如此海量的数据存储问题。这也说明了超大规模流媒体应用也将带动数据存储技术向前迅猛发展。
对于数据存储问题的解决,有两种可选的方式:分布存储方式和集中存储方式,以下分别介绍。
数据分布式存储方式
流媒体数据分布式存储是采用磁盘阵列在多个节点间分布的方式来存储媒体数据,如图7所示,由于节点之间可以通过互连I/O来进行相互通信,因此,这些磁盘阵列中存储的数据从物理上来看虽然挂接在某个特定的节点,但是对所有的节点来说,这些数据都是可以访问的,也就是说,数据是可以完全共享的。在逻辑上,系统通过数据管理屏蔽层的实现,整个系统的所有媒体数据存储设备就相当于一个巨大的存储池,这就是单一存储映像(Single Storage Image)的技术。
图1.7:分布式数据存储模型
可以看到,图1.7给出的视频服务器就是采用的这种方式,这种方式的视频服务器由于采用了紧耦合节点互连方式,内部高速互联网络具有很高的带宽,可以实现对远程节点的数据进行直接存取和访问,所有的数据对所有的节点来说都是可以访问的,因此,可以实现所有的节点可以“同时”访问同一数据内容。
集中式数据存储方式
流媒体数据集中存储是将现有的SAN或NAS系统作为视频服务器的存储部分,如图1.8所示的系统采用SAN作为存储方案,和图1.7不一样,每个节点可以通过FC交换机直接访问所有的数据而不需要经过其它节点,因此,所有的数据对所有的节点来说已经是共享的了,数据的读取可以不通过节点之间的内部高速互联网络,但是对所有的节点来说,这种数据共享必须是公平的,为了达到这一目的,必须采用一种均衡机制(如锁机制、分时方式等)来协调节点对存储设备的访问。这种方式的好处就是可以将节点从数据存储管理的负担中解脱出来,实现数据处理和数据存储的分离,同时对节点间的内部通信带宽可以不需要占用。
图1.8:集中式存储模型
目前基于这种结构的视频服务器也有相应的产品,或者提供了对这种存储方式的支持,从网络吞吐型应用的特性上说,采用这种方式的视频服务器体系结构更加合理,这种结构的好处就是系统可以在线升级和加入新的存储设备。但由于运营级视频服务是网络吞吐型应用,对带宽的要求很高,因此要求存储系统有很高的吞吐性能(100GB/s),而目前单个大型存储系统的带宽标称值一般为1.6GB,3.2GB(16或32个FC通道),这对大型运营级视频服务器来说远远不够,如果非要这样做,还必须增加FC交换机,并挂接多个分布式的RAID存储子系统,但这样问题又暴露出来了,数据又出现了共享问题。最要命的是,由于FC设备的价格原因,这样做代价很高。因此,目前少有大型视频服务器采用这种存储结构。
存储还可以采用NAS方式,由于NAS技术用于视频应用还不够成熟,目前还没有视频服务器采用,这里就不再介绍
数据存储带宽问题
对于视频服务器来说,数据存储得带宽是一个很重要的指标,由于目前节点内部的内存和互连I/O带宽已经不再是瓶颈,目前的技术均可以达到1~2GB/s,而目前计算机的网络I/O和存储I/O接口的带宽一般都在1Gbps以内。因此视频服务器的吞吐性能主要取决于存储I/O和网络接口速率,集中式存储和分布式存储有着对数据的不同的访问方式:
对于分布式存储访问,其系统内数据的处理路径如下:
读取数据路径:节点(请求)->中转节点(路由)->存储设备 #p#page_title#e#
输出数据路径:存储设备->中转节点(路由)->节点(处理)->网络接口(输出)
对于集中式存储访问,其系统内数据的处理路径如下:
读取数据路径:节点(请求)->FC交换->存储设备
输出数据路径:存储设备->FC交换->节点(处理)->网络接口(输出)
从数据的搬移路径可以看出,无论是分布式存储还是集中是存储,必须保证存储I/O的速度远远大于网络接口I/O的速度,即消除存储瓶颈,才能使网络接口以全速向外吐出数据。从经验来看,存储I/O速度的标称值必须配置成网络I/O接口速度的3倍以上。如配置2块100M网卡,则应该配置一个80MB/s的U2SCSI或100MB/s的FC存储接口。如nCUBE公司的视频服务器n4每个节点的输出能力为500Mbps,对应的每节点存储I/O配置了4条80MB/s的U2SCSI总线。
媒体数据存储技术
媒体数据的存储主要用到了数据分条(Striping)和校验(parity)技术。数据校验和分条是实现各种RAID技术的基础,其基本原理可简单描述如下:若采用n个stripe存储数据,则存储方法为,每存储n-1 个stripe,就生成一个stripe存放前n-1个stripe的校验(parity)数据,如此循环往复,如图1.9:
图 1.9:数据分条方式
计算校验(parity)的算法如下:
parity = stripe1⊕stripe2⊕stripe3⊕... ⊕stripe(n-1)
其中“⊕”是逻辑异或(XOR)运算、或称为模2加运算
若发生数据差错,如stripe3发生错误或无法读取,则用同样的算法来恢复:
stripe3 = stripe1⊕stripe2⊕stripe4⊕... ⊕stripe(n-1)⊕parity
对于校验除了XOR操作之外,还有其它的新技术,这里不再介绍。
stripe技术是数据分布式存储技术的基础,可以采用硬件方式,也可以采用软件方式实现,将一个大的文件均匀分条以后,就可以将其均匀的存放到到所有的存储设备中。