在将文件上传到Amazon S3时,我需要对Instagram的工程有一些了解 . 我只是从S3开始,我认为Instagram是一个很好的模型,因为他们每天上传数千张图片 . 我的应用程序有点类似 . 用户上传图像,可以删除自己的图像,所有图像都是公开的 .
在我的项目中,我正在创建具有文件夹前缀的对象,以组织每个用户的上传 . 例如 username/filename
我的对象网址如下所示:
https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13869d.jpg
但是Instagram:
http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg
我猜 distilleryimage7
是桶名 . 我也猜测Instagram不使用存储桶"files"并将所有图像存储在一个存储桶中 .
请分享S3中的所有最佳实践 .
1 回答
此URL实际上是S3默认支持的URL . 对于美国和大多数存储桶,您可以执行特殊的DNS解析,允许您使用以下任一方法:
有一些改变自己的记录或:
如果您不想更改任何A记录(小编:http://docs.amazonwebservices.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs) .
这种类型网址的优点当然是将某些资产的子域用于在浏览器中加载更快的常见想法 .
当然这是一个修复 . Facebook,Twitter和Youtube等其他网站使用的一种方法是使用完全不同的域来处理这类内容 . 这有助于它是一个专门为这些资产设计的剥离域(这些域上也不应存在cookie) .
因此,这不是S3的最佳实践,而是更多的Web开发,并涵盖了如何在 生产环境 环境中编程和布局网站的更广泛视图 .
是的Instagram将所有文件存放在一个巨大的单个存储桶中,这很可能是最理智的方法,然后当你变大时,你会复制部分存储桶并根据需求将它们分割成区域和子区域或ping它们像Vimeo那样的 Cloud 端 .
编辑
在进一步阅读之后,我意识到Instagram并没有把所有东西放在一个桶里 . 真的有点奇怪,特别是因为一个桶必须在整个S3中唯一地命名,包括其他人的帐户 . 因此,他们可能不会直接使用用户名,除非尚未使用该名称 .
尽管如此,这样做有很多好处 . 就像每个用户的复制和每个用户的 Cloud 端一样,但也存在缺点:
当显示许多用户图像时,很多单独的http请求,公平地说它完全属于S3域但我不确定有多少子域允许SEO和浏览器利用它(我认为在IE6中为6) .
备份和复制可能更难,因为您需要为每个用户而不是单个存储桶执行操作 .
将存储桶移动到cdn等可能会有问题,因为您必须再次按用户执行此操作 .
我想我记得在S3中看到了桶的最大限制,所以我不确定这将如何有效地扩展到tbh .