php - Instagram 如何使用 Amazon S3?

标签 php file-upload amazon-s3 amazon-web-services instagram

在将文件上传到 Amazon S3 时,我需要对 Instagram 的工程有一些了解。我刚开始使用 S3,我认为 Instagram 是一个很好的模型,因为他们每天上传数千张图片。我的应用程序有点相似。用户上传图片,可以删除自己的图片,所有图片都是公开的。

在我的项目中,我正在创建带有文件夹前缀的对象来为每个用户组织上传。例如用户名/文件名

我的对象 URL 如下所示:

https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13869d.jpg

但是 Instagram:

http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg

我猜 distilleryimage7 是桶名。我不确定这种类型的 URL 有什么优势。我还猜测 Instagram 不使用存储桶"file"并将所有图像存储在一个存储桶中。

请分享 S3 中的任何最佳实践。

最佳答案

这个URL实际上是S3默认支持的。对于美国和大多数存储桶,您可以执行特殊的 DNS 解析,它允许您使用:

http://my_bucket.my_domain.com

对您自己的记录进行一些更改或:

http://my_bucket.s3.amazonaws.com

如果您不想更改任何 A 记录(小入门:http://docs.amazonwebservices.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs)。

这种类型的 url 的优点当然是对某些 Assets 使用子域以加快浏览器加载速度的普遍想法。

当然这是一个修复。 Facebook、Twitter 和 Youtube 等其他网站使用的一种方法是为此类内容使用完全不同的域。这很有帮助,因为它是专门为这些 Assets 设计的剥离域(这些域中也不应该存在 cookie)。

因此,这并不是真正的 S3 最佳实践,而是更多的一般 Web 开发实践,涵盖了如何在生产环境中对网站进行编程和布局的更广泛视角。

是的,Instagram 会将所有文件放在一个巨大的单个存储桶中,这很可能是最明智的做法,然后当你变大时,你会复制部分存储桶,并根据需求将它们拆分到区域和子区域或者像 Vimeo 那样将它们 ping 到云端。

编辑

进一步阅读后,我也意识到 Instagram 并不能将所有内容都放在一个桶中。真的有点奇怪,特别是因为一个桶必须在整个 S3 中唯一命名,包括其他人的帐户。因此,除非尚未使用该存储桶名称,否则他们可能不会直接使用用户名。

这样做有很多好处。就像每个用户的复制和每个用户的云端一样,但是也有缺点:

  • 当显示许多用户图像时,有很多单独的 http 请求,这对 S3 域来说很公平,但我不确定允许 SEO 和浏览器利用它的子域有多少(我认为 6在 IE6 中)。

  • 备份和复制可能会更难,因为您需要为每个用户而不是单个存储桶执行备份和复制。

  • 将存储桶移动到 cdn 等可能会出现问题,因为您必须再次为每个用户执行此操作。

  • 我想我记得在 S3 中看到了存储桶的最大限制,所以我不确定这将如何有效扩展。

关于php - Instagram 如何使用 Amazon S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547077/

相关文章:

amazon-web-services - 如何使用 ARN 从 s3 存储桶下载

express - 从 express 的公共(public)文件夹中提供 git-lfs 文件

php - 我无法将消息发送给我的客户端使用 PHP、MySQL

php - 在 Joomla 中显示动态文章列表

php - getimagesize() vs finfo_file() 用于检测图像类型?

internet-explorer - IE8上传文件问题

php - 剩余时间变少时会出现不同的颜色

Php 包含安全性 - 使用数组和名称前缀

javascript - 在 Angular.js 中的 FineUploader 回调中更新 ngModel

Node.js Amazon S3 - 下载失败并出现 SignatureDoesNotMatch 错误