【问题标题】:How to scale out image hosting/serving?如何扩展图像托管/服务?
【发布时间】:2011-05-30 19:09:10
【问题描述】:

我正在建立一个用户可以上传照片的网站,我还将上传的照片转换为缩略图。

提前计划,如果网站变得流行,我如何扩展它,以便将图像(原始和缩略图)存储在多个服务器中并从多个服务器提供服务?也许是一个集群?有什么开源软件可以帮助我吗?

谢谢。

【问题讨论】:

  • 这是一个非常有趣的问题,我想知道答案。点赞! :)
  • 确实很有趣,但在serverfault.com 上可能更适合它?
  • 投票支持迁移到 Serverfault。我想你可能会在那里得到更好的答案
  • 我认为这个问题可以接受两种答案:基于开发的和基于基础设施的。如果我们想让它有机会获得基于开发的答案,则不应将其移至 serverfault。我建议@Continuation 在此处使用链接发布相同的问题,以获得基于基础架构的答案。

标签: architecture web scalability media cluster-computing


【解决方案1】:

解决这个问题的一种方法是将图像文件转换为二进制格式并将二进制文件保存到数据库中。

我使用 php 将图像转换为 blob 格式并将这些 blob 存储在 mysql 数据库中。当文件在数据库中时,您可以使用 php 脚本将 blob 转换回 mime 类型,如 jpeg 或 gif,然后显示在网页上。

因此,您的文件随后会集中存储在数据库中,您可以将用于将 blob 转换为图像的脚本放置在任意数量的服务器上。

我从未发现任何开源软件可以使用这种存储方法,但创建脚本相当简单。

【讨论】:

  • 恐怕我认为这根本不是一个好的解决方案。当图像的大小大于单个数据库实例时会发生什么。将图像作为 blob 存储在数据库中是一种很好的解决方案,这种情况很少见。
  • 它通常也比文件系统操作慢,而且这个特定的解决方案看起来不会扩展,因为你的所有图像实际上都只是来自一台机器。
【解决方案2】:

一个有趣的问题。

我认为最可靠和最容易扩展的解决方案是使用像 MogileFS 这样的东西,它是一个基于 HTTP 的分布式文件系统。

另一种可能更易于构建的方法是确保您了解在需要时如何扩展图像托管。可能的方法可能是: - 使用亚马逊 S3 - 在您的应用程序中手动实现图像的分片/分区,将图像存储在不同的后端服务器上(存储速度较慢/大),然后在其前面放置一个反向代理。

在我看来,MogileFS 将是解决这个问题的好方法。横向扩展应该是微不足道的,但初始实现可能需要更长的时间。

【讨论】:

    【解决方案3】:

    买它不建造它。 Akamai 和 Amazon CloudFront 及其同类公司将其商品化。不要重新发明轮子,它确实是一项专业功能,可以轻松可靠地外包,而且比内部构建便宜得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 2012-07-07
      • 1970-01-01
      相关资源
      最近更新 更多