如何优化AWS S3 bucket的下载速度



我们将特定于用户的可下载文件保存在北弗吉尼亚地区的AWS S3存储桶中。我们的客户从世界各地的这些存储桶中下载文件。文件大小在1-20 GB之间。对于较大的文件,非美国地区的客户会面临下载速度慢或下载中断的问题。我们如何优化这些下载?

我们正在考虑以下方法:

  1. 下载速度加快(成本更高(
  2. 使用源自S3的CloudFront CDN(由于我们的下载是不同的文件,每个文件只下载一到两次,CDN会有帮助吗,因为它第一次只从美国存储桶中获取数据(
  3. 将akamai用作CDN(与CloudFront一样令人担忧,唯一的问题是我们在组织层面与akamai达成了更好的价格协议(
  4. 根据用户的位置(我们知道下载将在哪里进行(,我们可以将文件保存在该aws区域创建的特定bucket中

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

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

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

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

在您的情况下,我可能会选择选项2,并在S3前面设置CloudFront。我更喜欢CloudFront而不是S3传输加速,因为它给了你更多的灵活性:你可以使用HTTPS使用你自己的域,稍后当文件的位置发生变化时,你可以重新配置源,等等。根据您想要走多远,您甚至可以将其与S3复制相结合,并为CloudFront分发提供多个来源,以将对不同文件的请求定向到不同区域的S3存储桶。

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

最新更新