如何缓存存储在Amazon S3中的图像?

时间:2015-02-17 03:27:33

标签: amazon-web-services amazon-s3 amazon-ec2 cloud

我在Amazon EC2上运行了RESTful Web服务。由于我的应用程序需要处理大量照片,我计划将它们放在Amazon S3上。因此,从S3检索照片的URL可能如下所示:

http://johnsmith.s3.amazonaws.com/photos/puppy.jpg

有没有办法或必要在EC2上缓存图像?我能想到的优点和缺点是: 1)通过改善图像获取性能降低了S3的使用和成本。然而另一方面,EC2成本可能上升,加上EC2可能由于带宽限制而无法处理图像缓存。 2)增加开发复杂性,因为您需要首先检查缓存并要求S3将图像传输到EC2,然后传输到客户端。

我正在使用EC2微型实例,并且觉得最好不要在EC2上进行图像缓存。但是规模可能会快速增长并最终需要图像缓存。(我是对的吗?)如果需要缓存,在EC2或S3上进行缓存是否更好? (有没有办法为S3缓存?)

顺便说一下,当客户端上传图片时,是否应该直接上传到EC2或S3?

3 个答案:

答案 0 :(得分:1)

EC2缓存实例的几个场景:

  • 您的上传/下载比率远远低于50/50

  • 你达到S3限制100req / sec

  • 您需要网址屏蔽

  • 您希望优化内核,TCP / IP设置,缓存客户端的SSL会话

  • 您希望所有地理位置都有适当的缓存无效机制

  • 您需要100%控制存储数据的位置

  • 您需要计算请求数量

  • 您有自定义身份验证机制

出于多种原因,我建议您查看Nginx S3 proxy

答案 1 :(得分:0)

静态与动态

一般来说,这里是层级:

best  CDN (cloudfront)
good  static hosting (S3)
okay  dynamic (EC2)

为什么呢?有几个原因。

  • 可维护性和可扩展性:Cloudfront和S3规模“免费”。您无需担心容量或带宽或请求率。
  • 价格:差不多说,使用S3比使用EC2便宜。
  • 延迟:CDN位于世界各地,导致加载时间缩短。

缓存

无论您在何处提供静态内容,正确使用Cache-Control标题都会让生活更美好。使用该标题,您可以告诉浏览器内容有多长。如果它永远不会改变,您可以指示浏览器将其保留一年。如果频繁更改,您可以指示浏览器将其保留一小时或一分钟,或每次重新验证 。您可以向CDN提供类似的说明。

Here's a good guide,以下是一些例子:

# keep for one year
Cache-Control: max-age=2592000

# keep for a day on a CDN, but a minute on client browsers
Cache-Control: s-maxage=86400, maxage=60

您可以将此添加到从EC2实例提供的页面(无论是nginx,Tornado,Tomcat,IIS),您可以将其添加到S3文件的标题中,CloudFront将使用这些值。

我会将图像从S3拉到EC2然后再提供它们。这是浪费精力。只有少数用例才有意义。

答案 2 :(得分:0)

为什么要将EC2纳入等式?我强烈建议在场景中使用CloudFront。

将CloudFront与S3结合使用时作为原点;内容分发到全球49个不同的位置(截至目前全球边缘位置数),直接在全球范围内作为缓存,并根据最终用户的延迟从最近的位置获取内容。

您不必担心Cache和EC2的规模和性能,可以直接将其卸载到CloudFront和S3。