我的朋友经营着一家流行的 Youtube 转 GIF 转换网站。目前,他已将 250,000 个 Youtube 视频转换为 GIF(每个视频有 6 个缩略图,总共 150 万个 GIF 文件),每月提供约 80TB 的带宽。
他的服务器存在 IO 阻塞——我不是管理员专家,但似乎是非连续 GIF 的硬盘寻道时间阻塞了一切。他有一台 100tb.com 的服务器,每月 300 美元,附带 100TB 的免费带宽。起初,我建议他使用 CDN 来解决他的问题,因为这样 GIF 就可以在不消耗服务器资源的情况下获得服务,而他的主机可以处理编码——我们发现一个每月 600 美元的 CDN 太慢/不可靠,其余的 CDN 至少要 2000 美元/月才能获得 80TB 的带宽。我们现在正试图将整个项目的成本控制在每月 900 美元以下。
因此,我们能找到的最便宜的带宽是 100TB,但一台服务器已经不够用了。我们可以再添加一台服务器,但我真的不知道如何对 GIF 存储进行分区,以便将负载均匀地分布在两台机器上。我们的主机建议使用 Aflexi.net 之类的软件,但我相信一定有更便宜的解决方案。
有人能帮忙吗?我是一名程序员,不是系统管理员,但我正在努力学习相关知识。谢谢!
答案1
S3 不是替代方案,80 TByte 的费用每月就超过 8,000 美元。
看起来您直接从文件系统提供 GIF。为什么不将所有 GIF 放在 2 台机器上,使用哈希算法将名称映射到 2 台机器中的一台,然后以这种方式交付它们?只要您的负载均衡器能够承受,这可以轻松扩展到更多机器……
答案2
将文件转储到 S3 并从那里提供服务。穷人的 CDN :)
如果您需要更多的处理能力,您可以进行 EC2 实例之外的转换并直接转储到您的“CDN”。
答案3
我无法评论其他评论,但它们听起来不错。我希望通过将最常访问(即最受欢迎)的文件保存在内存缓存中来减轻文件服务器的一些负载,即使用一个执行如下操作的 http 处理程序:
- 接收 GIF 请求
- 检查其是否在内存中,如果是,则提供给客户端
- 如果没有,则从其中一个文件服务器获取(在这里进行循环)并添加到内存缓存中
- 返回GIF给客户端
如果你能得到一台拥有大量 RAM 的机器,你会很高兴的,因为你很可能能够在内存中存储大量常用文件。
当达到饱和状态时,添加另一个图像处理服务器并循环使用它们。继续这样做,直到出现问题,即吞吐量、可扩展性和经济性。
我以前做过类似的事情,效果很好。
答案4
如果只有 2 台机器,您可以考虑使用 DRBD 在两台机器之间进行同步。然后只需使用 PHP 随机或通过算法决定在请求期间从哪个服务器提取数据。简单但可行的解决方案。