AWS S3 - 如何根据用户的地理位置向用户提供(并接收)文件?

问题描述:

这是我的情况和我的目标:AWS S3 - 如何根据用户的地理位置向用户提供(并接收)文件?

我有一个SaaS用户(全球)可以上传音频文件。这些音频文件随后会通过HTML5 <audio>流式传输到世界上任何人。目前,唯一的托管文件位于us-west-2,这在欧盟客户上传文件时显得有问题,而欧盟用户流式传输音频。

我怎么能有AWS:

  1. 即成了音频文件到用户,使用基于其地理位置适当的区域
  2. 接收使用S3桶(地区)上传最接近用户上传文件

我想也许CloudFront可以做到这一点,但AFAIK,CloudFront需要在实际缓存它之前下载一次文件,而这对我的SaaS不起作用。一个常见的用例是美国的某个人可能会上传一个重要的音频文件给德国的某个人听。我需要在德国的这个人尽可能快地体验一下流媒体体验,目前我收到了加载速度慢,音频不稳定的抱怨。

S3跨区域复制可能是有意义的(复制到欧盟中心-1作为一个很好的起点,涵盖斯堪的纳维亚半岛,其他欧洲国家和英国的客户),但我不知道如何制作一个S3 URL根据用户的地理位置从特定存储桶中提取文件。

这里最好的解决方案是什么?如何执行它?

为了提高文件上传的表现,你可以使用Amazon S3 Transfer Acceleration使文件的快捷,方便,安全的传输在你的客户端和S3桶之间长的距离。 Transfer Acceleration利用Amazon CloudFront的全球分布式边缘位置。随着数据到达边缘位置,数据将通过优化的网络路径发送到Amazon S3。

为了提高文件下载性能,你需要使用AWS的Cloudfront缓存。由于的Cloudfront起缓存从第一个请求的内容,如果您需要改进甚至每个区域的第一个请求的性能,可以自动通过来自不同地区的请求URL及时填充缓存。