【问题标题】:How to optimize download speeds from AWS S3 bucket?如何优化 AWS S3 存储桶的下载速度?
【发布时间】:2019-11-05 07:12:46
【问题描述】:

我们将用户特定的可下载文件保存在 N.Virginia 地区的 AWS S3 存储桶上。我们的客户从世界各地的这些存储桶中下载文件。文件大小范围为 1-20 GB。对于较大的文件,非美国地区的客户会面对并抱怨下载速度慢或下载中断。我们如何优化这些下载?

我们正在考虑以下方法:

  1. 加速下载(更高的成本)
  2. 使用具有 S3 源的 CloudFront CDN(由于我们的下载是不同的文件,每个文件只下载一次或两次,CDN 将有所帮助,因为它第一次将仅从美国存储桶获取数据)
  3. 将 akamai 用作 CDN(与 CloudFront 的关注点相同,唯一的问题是我们在组织级别与 akamai 达成了更好的价格协议)
  4. 根据用户的位置(我们知道将在哪里进行下载),我们可以将文件保存在在该 aws 区域创建的特定存储桶中。

所以,我想要在成本+下载速度方面的建议。哪个可能是进一步探索的更好选择?

【问题讨论】:

  • 3 有额外费用(3 - 从 S3 转移到 Akamai),4 会降低速度,POPS 比 AWS 区域多。
  • 这不是编程问题。
  • 这些对象是私有的还是可公开访问的?
  • @John 这些是私有对象。
  • 您的用户目前如何进行身份验证以访问文件?如果您迁移到 Amazon CloudFront,您可能需要实施不同的身份验证方法。

标签: amazon-web-services amazon-s3 cdn


【解决方案1】:

由于每个文件只会下载几次,因此您不会从 CloudFront 的缓存中受益,因为下载请求可能都命中同一个 CloudFront 节点并且该节点尚未从其缓存中逐出文件, 可能接近于零,尤其是对于如此大的文件。

另一方面,您可以通过使用 CloudFront 或 S3 Transfer Acceleration(后者与第一个没有缓存的情况基本相同)获得其他好处:请求已经在边缘进入 AWS 的网络,因此您可以避免使用从用户位置到您的 S3 存储桶位置的网络拥塞,这通常是下载缓慢和中断的主要原因。

根据用户位置存储数据也会改善这种情况,尽管 CloudFront 边缘位置通常比下一个具有 S3 的 AWS 区域更靠近用户。不根据用户位置将文件分发到不同 S3 存储桶的另一个原因是管理开销:您需要管理多个 S3 存储桶,将每个文件存储在正确的存储桶中,并将每个用户指向正确的存储桶。虽然使用S3 Replication 可以简化存储(您可以使用过滤器仅将对象复制到用于此存储桶的特定目标存储桶),但为多个客户管理多个端点的开销仍然存在。此外,当您声明您知道客户的位置时,如果客户确实更改了位置并突然想要下载现在存储在世界另一端的对象,会发生什么?你又会遇到同样的问题。

在您的情况下,我可能会选择选项 2 并在 S3 前面设置 CloudFront。我更喜欢 CloudFront 而不是 S3 Transfer Acceleration,因为它为您提供了更大的灵活性:您可以将自己的域与 HTTPS 一起使用,您可以稍后在文件位置更改时重新配置源等。取决于您想要走多远您甚至可以将其与 S3 复制相结合,并为您的 CloudFront 分配提供多个来源,以便将对不同文件的请求定向到不同区域的 S3 存储桶。

选择哪种解决方案取决于您的用例和限制条件。一个约束似乎是您的成本,另一个约束可能是 CloudFront 支持的 maximum file size of 20GB,如果您要分发的文件比这更大。

【讨论】:

  • 我们的下载链接仅在短时间内有效。所以用户的位置变化不会出现在图片中。无论如何,感谢您的洞察力。如果我有任何进一步的疑问,将再次发布。
  • 同意。 Amazon CloudFront 将是最简单的选择,并且可能会解决下载问题(即使对于不常访问的对象)。我建议您创建 CloudFront 发行版,然后与抱怨最多的用户一起尝试,看看它是否能解决问题。
  • @JohnRotenstein,它确实帮助我们进行了测试。我们计划继续采用这种方法。如果您可以提供另外 1 条建议,如何处理来自 CloudFront 被阻止的俄罗斯用户的请求?
  • 我不熟悉被 CloudFront 屏蔽的国家/地区。我进行了网络搜索,发现 S3 也可能被阻止?如果是这种情况,您将无能为力,因为无处可重定向它们。如果他们可以到达 S3,那么您可能会在 Route 53 中进行一些地理路由,以将一些地理信息(例如俄罗斯)发送到 S3,其余的发送到 CloudFront。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2019-09-06
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多