维护视频网站的表现

时间:2009-02-12 12:25:43

标签: performance video load-balancing

我正在建立一个在线视频播放网站(如Youtube)。我的技术挑战是提供大量的点击并仍然保持性能。

我目前的解决方案是设置多个后端服务器,让每个服务器缓存一部分视频,这样可以节省从磁盘I / O读取视频文件的时间。

另一台前端服务器将散列request video ID以查找视频所在的服务器,然后要求客户端浏览器重定向到特定服务器。

我的解决方案很简单,我想知道是否有其他人对我的解决方案有任何更好的想法或任何技术考虑因素?


请注意:我想将网站设置为在本地工作(而不是依赖Alakami等提供商),因为内容适用于我校的本地学生。这基本上是一个“内联网”解决方案。

4 个答案:

答案 0 :(得分:1)

当所有用户请求同一视频时,您的解决方案效果不佳。更好的解决方案是让所有服务器上都可以使用所有视频,并使用负载平衡服务器将当前请求重定向到打开数量最少的服务器。

请注意,存储后端(RAID阵列,SAN)可以以非常高的速率传输数据,因此您通常可以为多个视频服务器(即每N个视频服务器一个存储系统和1个负载均衡器)使用一个存储系统(如果你想要故障转移,则为两个)。)

这里一个好的解决方案是在协议中使用“重定向”命令:

  1. 客户端请求负载均衡器(LB)进行视频
  2. LB告诉客户端使用哪个视频服务器(VS)。这是一个简单的“找到具有最低开放量的VS.”
  3. 客户端直接连接到VS(以避免所有开销)
  4. VS告诉LB当前的开放源数量(此处不使用增量方法来避免同步问题)
  5. VS开始将数据流式传输到客户端
  6. 当客户端断开连接时,VS告诉LB新的提要数
  7. [编辑]让客户端直接连接到视频服务器的主要原因是网络吞吐量。如果所有VS都将其数据发送给将其传递给客户端的LB,那么您将限制自己使用LB的单(或双)网卡的速度。如果您有5个VS,则直接连接时可以获得5倍的吞吐量。此外,当更多用户通过简单地添加另一个视频服务器,将其插入骨干网并在LB上的列表中添加一个条目时,您可以轻松扩展系统。

答案 1 :(得分:1)

如果您的用户遍布全球,请尝试亚马逊的CloudFront(CDN)。如果您的用户已本地化(美国/欧洲),则可以使用S3。

此外,您还可以尝试使用Nginx(一种Web服务器),它非常有效地提供大型文件。

这样,您就不必在应用程序中处理不必要的架构复杂性。

答案 2 :(得分:0)

您是否在IIS7中的Windows上托管此内容?如果是这样,他们有一个模块用于IIS对视频进行限制,因此它不会更快地流式传输然后用户可以实际观看它。

答案 3 :(得分:0)

高性能的一个解决方案是使用Akamai之类的数据分发服务。他们在世界各地提供服务器空间,他们已经解决了性能问题。此外,由于他们在世界各地都有数据中心,因此您的数据不必走得太远,这对互联网和您都有好处(因为Akamai可以针对相同数量的数据收取较低的费用)。