AWS S3 - 如何根据地理位置向 to/from 用户提供(和接收)文件?

AWS S3 - How to serve (and receive) files to/from user based on their geographical location?

这是我的情况和我的目标:

我有一个 SaaS,用户(全球)可以在其中上传音频文件。这些音频文件稍后会被流式传输(通过 HTML5 <audio>)给世界上可能的任何人。目前,唯一的bucket托管文件在us-west-2,当欧盟客户上传文件,欧盟用户流音频时,这显然是有问题的。

怎样才能拥有AWS:

  1. 根据用户的地理位置使用适当的区域向用户提供音频文件
  2. 使用距离用户上传文件最近的 S3 存储桶(区域)接收上传

我想也许 CloudFront 可以做到这一点,但据我所知,CloudFront 需要在实际缓存文件之前下载一次文件,这对我的 SaaS 不起作用。一个常见的用例是,美国人可能会上传重要的音频文件供德国人收听。我需要德国的那个人尽可能快地体验流媒体体验,目前我收到关于加载时间慢和音频断断续续的投诉。

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

最好的解决方案是什么,我该如何执行?

要提高文件上传性能,您可以使用 Amazon S3 Transfer Acceleration,它可以在您的客户端和 S3 存储桶之间实现快速、轻松和安全的远距离文件传输。 Transfer Acceleration 利用 Amazon CloudFront 的全球分布式边缘站点。当数据到达边缘位置时,数据将通过优化的网络路径路由到 Amazon S3。

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