2009-02-12 61 views
1

我正在设置在线视频播放网站(如Youtube)。我的技术挑战是提供大量点击并保持性能。维护视频网站性能

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

另一台前端服务器将散列request video ID以查明视频驻留在哪个服务器上,然后要求客户端浏览器重定向到特定服务器。

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


请注意:我想建立网站在本地工作(而不是依赖于像Alakami提供商)的内容是本地学生从我的学校。这基本上是一个'内联网'的解决方案。

+0

我已经更新了您的问题,并附有您评论中的重要信息!您能否提供更多信息,了解您期望达到顶峰的用户数量以及您使用的是什么技术(Flash视频?Windows Media?) – 2009-02-12 12:37:20

+0

嗨保罗!感谢您的关注。我更喜欢使用Flash,但使用Silverlight也很好。在当前的估计中,峰值用户数可能大约为1000。任何技术想法? – George2 2009-02-12 12:51:23

回答

0

你在IIS7的Windows上托管这个吗?如果是这样的话,他们有一个IIS模块可以对视频进行限制,所以它不会流得更快,那么用户实际上可以观看它。

+0

两条评论,1.我正在使用IIS 6.0。我可以在Windows Server 2003上安装IIS 7.0吗? 2.另一个问题是,我需要的是提交/批准发布/分类系统,而不仅仅是流式解决方案。我认为从IIS 7.0的解决方案只提供流媒体,没有其他的部分? – George2 2009-02-12 12:34:25

+0

嗨乔希,我想到了另一个问题。对于IIS 7.0,只有一台机器,网络功能非常有限。是否有任何IIS 7.0视频解决方案的内置解决方案来集群几台服务器来进行负载平衡? – George2 2009-02-12 12:36:41

0

高性能的一个解决方案是使用数据分发服务,如Akamai。他们提供遍布全球的服务器空间,他们已经解决了性能问题。而且,由于他们在全球拥有数据中心,因此您的数据不必走很远,这对互联网和您都有好处(因为Akamai可以为相同数量的数据收取较低的费用)。

1

当所有用户请求相同的视频时,您的解决方案将无法正常工作。更好的解决方案是在所有服务器上都可以使用所有视频,并使用负载平衡服务器将当前请求重定向到打开最少数量的服务器的服务器。请注意,存储后端(RAID阵列,SAN)可以以非常高的速率传输数据,因此您经常可以使用一个存储系统为多个视频服务器(即每N个视频服务器一个存储系统和1个负载平衡器(如果需要故障转移,则为两个))。

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

  1. 客户端请求的视频
  2. LB告诉客户端视频服务器(VS)要使用的负载平衡器(LB)。这是一个简单的“查找与最低数量的开放饲料VS”。
  3. 客户端直接连接到VS(以避免所有开销)
  4. VS告诉LB当前量开饲料(不要用一种渐进的办法在这里以避免同步问题)
  5. VS开始流数据到客户
  6. 当客户端断开,VS告诉饲料

[编辑]主要的原因,以获得客户端直接连接到视频服务器的新号码的LB是网络吞吐量。如果所有的VS都将数据发送给将它传递给客户端的LB,那么您将自己限制为LB的单个(或双)网卡的速度。如果您有5个VS,则直接连接时可以获得5倍的吞吐量。此外,当更多用户敲击它时,只需添加另一台视频服务器,将其插入骨干网并在LB上添加一个条目,即可轻松扩展您的系统。

1

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

此外,你也可以尝试使用Nginx(一个网络服务器),这是非常有效的服务大型文件。

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