1

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

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

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

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


请注意:我希望将站点设置为在本地工作(而不是依赖于像 Alakami 这样的提供商),因为内容是针对我学校的本地学生的。这基本上是一个“内部网”解决方案。

4

4 回答 4

1

如果您的用户分布在世界各地,请尝试使用 Amazon 的 CloudFront(一个 CDN)。如果您的用户是本地化的(美国/欧洲),您可以使用 S3。

此外,您还可以尝试使用 Nginx(一种 Web 服务器),它在处理大文件方面非常有效。

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

于 2009-02-26T19:49:54.703 回答
1

当所有用户都请求相同的视频时,您的解决方案将无法正常运行。更好的解决方案是让所有服务器上的所有视频都可用,并使用负载平衡服务器将当前请求重定向到打开的提要数量最少的服务器。

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

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

  1. 客户端向负载均衡器 (LB) 请求视频
  2. LB 告诉客户端使用哪个视频服务器(VS)。这是一个简单的“找到开放提要数量最少的 VS”。
  3. 客户端直接连接到 VS(以避免所有开销)
  4. VS 告诉 LB 当前打开的提要数量(此处不要使用增量方法以避免同步问题)
  5. VS 开始将数据流式传输到客户端
  6. 当客户端断开连接时,VS 告诉 LB 新的提要数量

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

于 2009-02-12T12:53:15.767 回答
0

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

于 2009-02-12T12:28:39.273 回答
0

一种非常高性能的解决方案是使用像Akamai这样的数据分发服务。他们在全球范围内提供服务器空间,并且已经解决了性能问题。此外,由于他们在世界各地都有数据中心,因此您的数据不必传输很远,这对 Internet 和您都有好处(因为 Akamai 可以对相同数量的数据收取更低的费用)。

于 2009-02-12T12:28:56.963 回答