Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Instagram如何使用Amazon S3?_Php_File Upload_Amazon S3_Amazon Web Services_Instagram - Fatal编程技术网

Php Instagram如何使用Amazon S3?

Php Instagram如何使用Amazon S3?,php,file-upload,amazon-s3,amazon-web-services,instagram,Php,File Upload,Amazon S3,Amazon Web Services,Instagram,在将文件上传到AmazonS3时,我需要了解Instagram的工程设计。我只是从S3开始,我认为Instagram是一个很好的模式,因为他们每天上传数千张图片。我的应用程序有点类似。用户上传图片,可以删除自己的图片,并且所有图片都是公开的 在我的项目中,我使用文件夹前缀创建对象,以组织每个用户的上载。e、 g.用户名/文件名 我的对象URL如下所示: https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13

在将文件上传到AmazonS3时,我需要了解Instagram的工程设计。我只是从S3开始,我认为Instagram是一个很好的模式,因为他们每天上传数千张图片。我的应用程序有点类似。用户上传图片,可以删除自己的图片,并且所有图片都是公开的

在我的项目中,我使用文件夹前缀创建对象,以组织每个用户的上载。e、 g.
用户名/文件名

我的对象URL如下所示:

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

http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg
我猜
蒸馏图像7
就是bucket名称。我不确定这种URL有什么优势。我还猜测Instagram不使用bucket“文件”,而是将所有图像存储在一个bucket中


请分享S3中的最佳实践

这个URL实际上是S3默认支持的URL。对于我们和大多数bucket,您可以执行特殊的DNS解析,该解析允许您使用:

http://my_bucket.my_domain.com
对您自己的记录进行一些更改,或者:

http://my_bucket.s3.amazonaws.com
如果您不想更改任何A记录(一个小入门:)

当然,这种url的优点是,通常认为可以对某些资产使用子域,以加快浏览器中的加载速度

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

因此,这并不是S3的最佳实践,而是更一般的web开发,涵盖了如何在生产环境中编程和布局站点的更广泛视角

是的,Instagram会将所有文件放在一个巨大的单一存储桶中,这很可能是最明智的方法。当你变大时,你会复制存储桶的一部分,并根据需要将其分为多个区域和子区域,或者像Vimeo一样将其ping到cloudfront

编辑 进一步阅读后,我也意识到Instagram并不是把所有东西都放在一个桶里。真的有点奇怪,尤其是因为一个bucket必须在整个S3(包括其他人的帐户)中唯一命名。因此,他们可能不会直接使用用户名,除非尚未使用该bucket名称

但这样做有巨大的好处。与每个用户的复制和每个用户的cloudfront一样,也有缺点:

  • 当许多用户的图片被显示时,会有很多单独的http请求,这对S3域来说已经足够公平了,但我不确定SEO和浏览器可以利用多少子域(我认为IE6中有6个子域)

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

  • 将存储桶移动到cdn等可能会有问题,因为您必须再次按照每个用户进行操作

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


感谢您的深刻见解!我读到每个S3帐户可以使用100个bucket,但是每个bucket可以有无限的对象。我在Instagram的对象URL中没有看到用户名,所以我猜他们没有使用文件前缀。他们可能在对象元数据中添加用户名。@CyberJunkie是的,我之所以想到用户名是因为
蒸馏图像7
的缘故,但如果那不是用户名,我就收回我的编辑。看起来真的很奇怪,他们每个用户使用一个桶。我处理视频的方法是将S3URL放在DB行中,这给了我要获取的S3对象的url。是的,
蒸馏图像7
是我认为的bucket名称。他们不能为每个用户提供一个存储桶,因为只允许100个。bucket名称中的数字各不相同。我也将iObject数据存储在db表中,比如名称、大小、类型、添加的日期。。这样,我可以减少API请求,只使用数据库。