【问题标题】:How to cache the images stored in Amazon S3?如何缓存存储在 Amazon S3 中的图像?
【发布时间】:2015-04-17 17:08:11
【问题描述】:

我有一个在 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?

【问题讨论】:

  • 根据多种原因,定制解决方案可能更适合您。查看您的要求并与可用的 CDN 解决方案进行比较。

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


【解决方案1】:

EC2缓存实例时的几个场景:

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

  • 你达到了 S3 限制 100req/sec

  • 您需要网址屏蔽

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

  • 您需要为所有地理位置设置适当的缓存失效机制

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

  • 你需要统计请求数

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

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

【讨论】:

    【解决方案2】:

    静态与动态

    一般来说,以下是层级:

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

    为什么?有几个原因。

    • 可维护性和可扩展性:云端和 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 然后提供它们。是白费力气。只有少数用例有意义。

    【讨论】:

      【解决方案3】:

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

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

      您无需担心缓存和 EC2 的规模和性能,可以直接将其卸载到 CloudFront 和 S3。

      【讨论】:

      • 我一直在使用 CloudFront。我看到的唯一缺点是 CloudFront 生成的长度签名 url。并且将这些也传递给客户端(Web 和 Android)是另一个开销。关于如何克服这个问题的任何想法,或者您根本不认为这是一个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2011-11-17
      • 1970-01-01
      • 2011-01-04
      • 2017-10-07
      • 1970-01-01
      相关资源
      最近更新 更多