4

让我解释一下困境。我使用亚马逊的 3 项服务:EC2、S3 和 CloudFront。EC2 接收文件作为上传,将其存储在 S3 存储桶中。然后 CloudFront 镜像 S3 存储桶。唯一的限制是拥有用户友好的 URL。交付这些文件的哪种方法更好?

客户端 > CloudFront > EC2 > S3

  • 客户端向 CloudFront URL 发出 HTTP 请求
  • Cloudfront 将请求转发到 EC2
  • EC2 将用户友好的 URL 转换为原始文件 URL
  • EC2 从 S3 读取文件

客户端 > EC2 ...重定向 ... CloudFront > S3

  • 客户端向 EC2 发出 HTTP 请求
  • EC2 将用户友好的 URL 转换为原始文件 URL
  • EC2 重定向到 CloudFront,巫婆镜像 S3

这有两个维度:速度和成本。


我看到 facebook 在提供个人资料图片时使用第二种方法 http://graph.facebook.com/platform/picture

4

2 回答 2

2

您当然不想强制 S3 和您的客户端之间的文件传输通过您的 EC2 实例。这将增加 E​​C2 实例的负载,增加带宽使用,并且无疑会减慢对用户的响应。

您的 EC2 实例为您提供了对 URL 格式的最大控制权,因此您希望客户端向它发出初始请求(以获得“用户友好”的 URL)。EC2 实例只需向客户端发送重定向到实际包含内容的 CloudFront 或 S3 URL,客户端将直接从那里拉取它,而无需 EC2 的进一步参与。

除非您有大量请求,或者网络延迟必须尽可能低,否则我不会使用 CloudFront。

于 2013-01-23T14:31:10.200 回答
1

我个人只会在第一次上传文件时在 S3 中给文件一个好听的名称和适当的内容类型元标记,因此,从下载路径中完全删除您的 EC2 实例。您只需在 HTML 内容中为您的客户端提供 clean-url,该干净 URL 将直接指向 Cloudfront/S3 中的资源,该资源具有适当的元标记来提供所需的内容类型标头。

于 2013-01-23T18:54:58.683 回答