我们将用户特定的可下载文件保留在弗吉尼亚北部地区的AWS S3存储桶中。我们的客户从世界各地的这些存储桶中下载文件。文件大小范围为1-20 GB。对于较大的文件,非美国位置的客户会面对下载速度慢或下载中断的抱怨。我们如何优化这些下载?
我们正在考虑以下方法:
所以,我需要有关费用+下载速度的建议。哪一个是进一步探索的更好选择?
由于每个文件只会被下载几次,因此您将不会从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,如果您要分发的文件大于该约束。