如何在从 Web 应用程序上传的服务器上存储 10 亿张图像? [关闭]

Posted

技术标签:

【中文标题】如何在从 Web 应用程序上传的服务器上存储 10 亿张图像? [关闭]【英文标题】:How can I store 1 billion images on servers uploaded from a web application? [closed] 【发布时间】:2014-10-18 10:06:30 【问题描述】:

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

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

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

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

假设如下:

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

每位用户最多 20 张照片(10 个 90 像素 x 90 像素和 10 最大宽度为 500 像素或最大值的大型、脚本调整大小的图像 高度 500px 取决于图像的形状,意思是正方形,矩形, 水平、垂直等)。

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

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

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

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

http://highscalability.com/flickr-architecture

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

【问题讨论】:

你太慷慨了:“[..] 如果你愿意,甚至可以随意写一篇关于它的文章。” @RobbyCornelissen 这似乎是一份工作任务的副本,以及针对学生的“随意......”部分。最有可能的家庭作业。 @thorstenmüller 对于家庭作业来说似乎有点宽泛。自己在猜测面试任务。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于如何在从 Web 应用程序上传的服务器上存储 10 亿张图像? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何让用户直接把图片上传到对象存储 S3

如何在 Web 应用程序(ASP.Net、C#、IIS)中进行文件上传

如何在从管理面板 Django 1.3 上传的模板中显示图像

使用 rest api 从 Web 应用程序将文件上传到 Azure 文件存储

等待 angularfire 存储上传

在从 php 会话注销期间取消设置 cookie 有啥意义?