7.7.5 在多个磁盘上存放文件

为了获得更高的性能,视频服务器经常拥有可以并行运转的很多磁盘。RAID有时会被用到,但是通常并不是因为RAID以性能为代价提供了更高的可靠性。视频服务器通常希望高的性能而对于校正传输错误不怎么太关心。除此之外,如果RAID控制器有太多的磁盘要同时处理,那么RAID控制器可能会成为一个瓶颈。

更为普通的配置只是数目很多的磁盘,有时被称为磁盘园(disk farm)。这些磁盘不像RAID那样以同步方式旋转,也不像RAID那样包含奇偶校验位。一种可能的配置是将电影A存放在磁盘1上,将电影B存放在磁盘2上,以此类推,如图7-24a所示。实际上,使用新式的磁盘,每个磁盘上可以存放若干部电影。

阅读 ‧ 电子书库
图 7-24 在多个磁盘上组织多媒体文件的四种方式:a)无条带;b)所有文件采用相同的条带模式;c)交错条带;d)随机条带

这一组织方式实现起来很简单,并且具有简单明了的故障特性:如果一块磁盘发生故障,其上的所有电影都将不再可用。注意,一家公司损失了一块装满了电影的磁盘并没有一家公司损失了一块装满了数据的磁盘那么糟糕,因为电影还可以从DVD重新装载到一块空闲的磁盘中。这一方法的缺点是负载可能没有很好地平衡,如果某些磁盘上装载的是目前十分热门的电影,而另外的磁盘上装载的是不太流行的电影,则系统就没有被充分利用。当然,一旦知道了电影的使用频率,那么手工移动某些电影以平衡负载也是可能的。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

第二种可能的组织方式是将每一部电影在多块磁盘上分成条带,图7-24b所示为4部电影的例子。让我们暂时假设所有的帧大小相同(也就是未压缩)。固定的字节数从电影A写入磁盘1,然后相同的字节数写入磁盘2,直到到达最后一块磁盘(在本例的情形中是A3单元)。然后,再次在第一块磁盘处继续分条带操作,写入A4单元,这样进行下去直到整个文件被写完。电影B、C和D以同样的模式分成条带。

由于所有的电影在第一块磁盘开始,这一条带模式的一个可能的缺点是跨磁盘的负载可能不平衡。一种更好地分散负载的方法是交错起始磁盘,如图7-24c所示。还有一种试图平衡负载的方法是对每一文件使用随机的条带模式,如图7-24d所示。

到目前为止,我们一直假设所有的帧大小相同,而对于MPEG-2电影,这一假设是错误的:I帧比P帧要大得多。有两种方法可以处理这一新出现的问题:按帧分条带或按块分条带。按帧分条带时,电影A的第一帧作为连续的单位存放在磁盘1上,不管它有多大。下一帧存放在磁盘2上,以此类推。电影B以类似的方式分条带,或者在同一块磁盘上开始,或者在下一块磁盘上开始(如果是交错条带),或者是在随机的一块磁盘上开始。因为每次读入一帧,这一条带形式并没有加快任何给定电影的读入,然而它比图7-24a更好地在磁盘间分散了负载,如果有许多人决定今晚观看电影A而没有人想看电影C,图7-24a的表现将很糟糕。总的来说,在所有的磁盘间分散负载将更好地利用总的磁盘带宽,并因此而增加能够服务的顾客数目。

分条带的另一种方法是按块分条带。对于每部电影,固定大小的单元连续(或随机)写到每块磁盘上。每个块包含一个或多个帧或者其中的碎片。对于同一部电影,系统现在可以发出对多个块的请求,每个请求要求读数据到不同的内存缓冲区,但是以这样的方式,当所有的请求都完成时,一个连续的电影片断(包含多个帧)在内存中将被连续地组装好。这些请求可以并行处理。当最后一个请求被满足时,可以用信号通知请求进程工作已经完成了,此时它就可以将数据传送给用户。许多帧过后,当缓冲区下降到最后几帧时,更多的请求将被发出,以便预装载另外一个缓冲区。这一方法使用了大量的内存作为缓冲区,从而使磁盘保持忙碌。在一个具有1000个活跃用户和1MB缓冲区的系统上(例如,在4块磁盘中的每块上使用256KB的磁盘块),将需要1GB的RAM作为缓冲区。在1000个用户的服务器上,这样的内存用量只是“小意思”,应该不会有问题。

关于条带的最后一个问题是在多少个磁盘上分条带。在一个极端,每部电影将在所有的磁盘上分成条带。例如,对于2GB的电影和1000块磁盘,可以将2MB的磁盘块写在每块磁盘上,这样就没有电影两次使用同一块磁盘。在另一个极端,磁盘被分区为小的组(如同图7-24那样),并且每部电影被限制在一个分区中。前者称为宽条带(wide striping),它在平衡磁盘间负载方面工作良好。它的主要问题是每部电影使用了所有磁盘,如果一块磁盘出现故障,那么就没有电影可以观看了。后者称为窄条带(narrow striping),它将遭遇热点(广受欢迎的分区)的问题,但是损失一块磁盘将只是葬送存放在其分区中的电影。对于可变大小帧的划分条带,Shenoy和Vin(1999)在数学上进行了详细的分析。