-4

存储 10 亿张图像的最佳方式是什么?(由网站用户通过 PHP 或 Javascript 上传)

既然每个人都知道在单个目录或 NFS 等中存储大量图像(在这种情况下是网站用户上传的图像)是不好的,那么存储 10 亿张图像的存储解决方案的最佳方式、架构和配置是什么?

假设单个用户不会拥有超过 20 张图像,我们将如何组织用户图像?请考虑这必须以结构化方式组织,以便我们可以通过某种类型的用户唯一标识符或哈希以编程方式通过 php/javascript 或 API 获取单个用户的图像。

任何开源解决方案都将是首选。可能的解决方案是 glusterFS、MongoDB、WeedFS 等。

假设如下:

  • 使用 Linux Debian 发行版的网站每月将有 10 亿次页面浏览量

  • 每个用户最多 20 张照片(10 个 90 像素 x 90 像素和 10 个大的缩略图,脚本调整大小的图像,最大宽度为 500 像素或最大高度为 500 像素,具体取决于图像的形状,即正方形、矩形、水平、垂直等)。

  • 一个 LEMP-stack (Linux Nginx MySQL PHP) 社交媒体类型的应用程序,其内容将是文本和图像。

  • 没有像 S3 等第三方云存储。它必须在使用我们自己的硬件和资源的私有数据中心内。

  • 该解决方案必须包括存储解决方案和组织用户上传的图像。

在我的研究过程中,我还提出了以下 2 篇很棒的文章,以帮助您进一步澄清我的问题。

http://highscalability.com/flickr-architecture

http://perspectives.mvdirona.com/2008/06/30/FacebookNeedleInAHaystackEfficientStorageOfBillionsOfPhotos.aspx

4

1 回答 1

0

对于项目的存储部分,我会说您需要与安装在专用或外部磁盘(SATA、SAS 或光纤/SSD)上的通常文件系统不同的东西。

Glusterfs 分布式文件系统非常适合使用存储引擎,因为它可以支持复制配置(用于 HA)以及分布式(和混合)配置以提高 IO 速度。

对于项目的组织部分,我认为您应该有一个主文件系统(安装在所有客户端/Web 服务器上),并且在这个文件系统中,您应该为每个用户有单独的目录,有两个子目录(一个用于高分辨率和一个用于小分辨率图片)。

最后,相同的存储服务器可以同时用作 Web 服务器,也可以使用不同的服务器(可能是虚拟机 XEN、KVM 或 Vmware)。应使用 fuse 和 glusterfs 客户端模块(来自 /etc/fstab)将 gluster 卷安装到 Web 服务器。这对于 glusterfs 的功能来说是必须的。

于 2014-08-25T10:26:29.150 回答