【发布时间】:2016-03-05 08:00:12
【问题描述】:
我在 S3 存储桶(位于 ap-southeast-1 区域)中有内容,该存储桶通过 Cloudfront 为用户提供服务器,以最大限度地减少延迟并最大限度地提高吞吐量。当来自美国的用户访问内容并且对象未缓存在边缘位置时,我们在此设置中面临高延迟。在 B2C 业务中,我们的内容并不热门,因此来自 Cloudfront 的缓存未命中率很高。因此,我们也希望在缓存未命中的情况下提高延迟和吞吐量。我们也探索过 akamai,但它在源服务器距离较远时缓存未命中的情况下也表现不佳。
我曾想过将 s3 内容复制到不同区域的多个存储桶中,然后采用以下策略之一,但都没有奏效。
- 通过 Route53 创建一个域,以使用基于延迟的路由将请求路由到最近的 s3 存储桶,然后将此域用作 Cloudfront 的源。
- 本例的问题是bucket名称应该与Route53中指定的域相同,并且只能有一个同名的bucket。
- 在每个区域创建 Cloudfront 分发,该分发与最近的源 S3 服务器相关联。在每个发行版中启用 CNAME。为该域创建 Route53 条目并使用基于延迟的路由将用户发送到适当的分布。
- 这种方法的问题是,一旦我为一个分发指定了 CNAME,我就不能在另一个分发中使用相同的 CNAME。
- 另一种方法是检测用户的 IP 以确定应用服务器中的适当区域,然后为该区域提供专门的 URL。这不是无缝的方法,因为需要更改应用逻辑。
这个问题有哪些可能的解决方案?我愿意探索除 AWS 之外的其他可能性,但我自己编写所有代码不会有效率。
谢谢!
【问题讨论】:
-
我会考虑让您将文件推送到边缘位置而不是在每个边缘位置等待缓存文件的请求的 CDN。 MaxCDN 的“推送区”之类的东西可能对您很有效。
标签: caching amazon-web-services amazon-s3 amazon-cloudfront amazon-route53