我需要的是一些洞察的Instagram的工程文件上传到Amazon S3的时候。 我刚开始使用S3和我想的Instagram是一个很好的模式可以遵循,因为他们每天上传的数千张图片。 我的应用程序有几分相似。 用户上传图片,可以删除自己的图像,和所有图像都是公开的。
在我的项目,我有一个文件夹的前缀创建对象,组织上传为每个用户。 例如, username/filename
我的目标网址如下所示:
https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13869d.jpg
但Instagram的:
http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg
我猜测, distilleryimage7
是斗名称。 我不知道这种类型的网址有什么优势。 我还猜测,Instagram的不使用斗“文件”,并存储所有图像在一个桶中。
请分享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 )。
这类网址的优点当然是使用subodomains某些资产,使加载在浏览器更快的共同思想。
当然,这是一个修复。 通过其他网站,如Facebook,Twitter和YouTube使用的一种方法是使用一个完全不同的域这种东西。 这可以帮助,因为它是专门为这些资产的设计(无饼干应在这些领域存在两种)一个剥离出来域。
因此,这是不是真的S3的最佳实践,但一般多Web开发的占地如何编程,并在生产环境中布置一个网站更广泛的观点。
是Instagram的将容纳在一个巨大的单桶中的所有文件,这是最有可能这样做的最明智的方法,然后当你大,你会复制水桶的部分和在需要时他们在不同区域和从属子区域分割或ping他们到CloudFront的像Vimeo的一样。
编辑
读这进一步,我意识到太那个Instagram的并不在一个桶中容纳一切。 有点不可思议真的,特别是因为水桶必须在整个S3的包括其他民族占唯一命名。 因此他们可能不直接除非桶名称尚未采取使用的用户名。
有在做这虽然巨大的效益。 就像每个用户和每个用户CloudFront的复制但是也有缺点:
许多单独的HTTP请求时显示许多用户的图像,不够公平这是所有到S3域名,但我不确定你有多少子域允许搜索引擎和浏览器,以充分利用它(我认为6 IE6)。
备份和复制也很难,因为你会需要一个单斗每个用户没有。
移动水桶CDN等可能会有问题,因为你又要去做每个用户。
我想,我记得看到在S3存储桶一个最大限制,所以我不能确定这将如何有效地TBH规模。