【问题标题】:AWS Cloudfront latency: origin fetch vs internetAWS Cloudfront 延迟:原始获取与互联网
【发布时间】:2018-05-17 21:20:10
【问题描述】:

平均而言,通过 Cloudfront 从源中获取任何给定文件的速度是否比通过 Internet 直接从源中获取更快?我想知道 AWS 主干网是否在某种程度上超过了公共互联网的速度。

例如,如果来自悉尼的用户想要来自我在欧洲的 S3 中的文件,而 Cloudfront 尚未将其缓存,那么直接通过 Internet 获取文件是否更快,或者 Cloudfront 将其从欧洲来源获取到悉尼边缘缓存和最后几跳的互联网?但这只是一个例子。用户将遍布全球,其中许多将在欧洲,靠近原产地。

我确实明白,在发出请求后,CDN 将缓存文件,并且来自悉尼的后续请求在文件的 TTL 内对同一文件的请求会快得多,但后续请求在我的用例中不会经常发生......

我在 S3 上有大量小文件 (

我很好奇,在这种情况下,将 Cloudfront 放在 S3 之前是否值得,即使我不会从 CDN 提供的边缘缓存服务中获得太多价值。

那么我是否应该期望看到这些第一次提取场景的平均延迟减少?

编辑:我随后发现 this article 提到“持久连接...减少整体延迟...”,但我怀疑这只是意味着 Cloudfront-to-origin 子系统的更好性能,而不一定是更好的最终-为用户提供最终性能。

【问题讨论】:

    标签: amazon-cloudfront


    【解决方案1】:

    我想知道 AWS 主干网的速度是否在某种程度上超过了公共互联网的速度。

    这个想法是应该的。

    您应该会看到整体改进,因为 CloudFront 会做一些有用的事情,即使在不缓存的情况下也是如此:

    • 将流量带到 AWS 托管网络中,尽可能靠近查看器,流量在 AWS 网络上而不是公共 Internet 上穿越其大部分距离。

    • 通过创建两个 TCP 连接¹来划分浏览器和源之间的 TCP 交互,一个从浏览器到 CloudFront,一个从 CloudFront 到源。对连接设置、TLS 协商、HTTP 请求/响应的来回消息传递进行了优化。

    • (可选)提供 http/2 到 HTTP/1.1 网关/转换,允许浏览器通过单个 http/2 连接发出并发请求,同时在到源的不同连接上将这些请求转换为多个 HTTP/1.1 请求.

    在离开区域访问 Internet 的流量与离开 CloudFront 边缘访问 Internet 的流量之间的成本差异中存在一些小的套利机会。 (从 EC2/S3 到 CloudFront 的出站流量不计费)。在许多情况下,这些对您有利,例如低成本区域中的查看器访问高成本区域中的存储桶,但它们几乎总是不对称的。伦敦查看器和悉尼存储桶直接访问存储桶的费用为 0.14 美元/GB,但通过 CloudFront 访问同一存储桶的费用为 0.085 美元/GB。另一方面,访问 London 存储桶的 Sidney 查看器直接访问存储桶的费用为 0.09 美元/GB,通过 CloudFront 的费用为 0.14 美元/GB。伦敦查看器/伦敦存储桶通过 CloudFront 的价格为 0.085 美元,或者直接到存储桶的价格为 0.09 美元/GB。我的长期假设是,这些差异代表了与 AWS 私有传输成本相比的 Internet 访问成本。您还可以通过价格等级功能将 CloudFront 配置为仅使用成本较低的边缘,这并不保证实际仅使用成本较低的边缘进行流量,而是保证在成本较低的边缘不会向您收取更高的价格未使用。

    另请注意,有两个(已知的)服务使用 CloudFront 和缓存总是禁用

    在存储桶上启用 S3 Transfer Acceleration 基本上是一种无需启用缓存的零配置 CloudFront 分配。与自配置 CloudFront + S3 安排相比,传输加速只有三个显着差异:具体来说,它可以传递 S3 理解和接受的签名 URL(使用 S3 和您自己的 CloudFront,您必须使用 CloudFront 签名 URL,它使用一种不同的算法),并且对于地理位置靠近存储桶区域的用户绕过 CloudFront 网络,这也消除了该请求的传输加速附加费。第三个区别是它几乎总是比您自己的 CloudFront + S3 花费更多。

    AWS 显然认为这里增加的价值足够重要,以至于该功能的成本高于自己使用 S3 + CloudFront 是有意义的。有时,我会使用它从直接到存储桶的安排中挤出更多优化,因为它很容易进行更改。

    找到传输加速速度测试on this page 并观察它的作用。这是上传,而不是下载,但它是相同的想法 - 它可以让您合理地描述公共互联网和 AWS“边缘网络”(CloudFront 基础设施)之间的差异。

    出于性能原因,API Gateway 边缘优化 API 也会通过 CloudFront 进行路由。虽然 API Gateway 确实提供可选缓存,但它使用缓存实例,而不是 CloudFront 缓存。 API 随后引入了第二种类型的 API 端点,它不使用 CloudFront,因为当您在同一个实际 AWS 区域内发出请求时,通过额外的硬件发送请求是没有意义的。这也使得在您自己的 CloudFront 后面部署 API Gateway 更加明智,避免了不必要的第二次通过相同的基础架构。


    ¹两个 TCP 连接实际上可能是三个,这应该会进一步提高性能,因为每个连接之间的边界提供了一个内容缓冲区,允许更顺畅和更快的传输并改变带宽延迟乘积以有利的方式。自 2016 年的某个时间以来,CloudFront 有两层边缘站点,外部“全球”边缘(最靠近查看器)和内部“区域”边缘(在实际 AWS 区域内)。这是documented,但文档非常高级,并没有彻底解释基础。轶事观察表明,每个全球边缘都有一个分配的“主”区域边缘,它是其最近的 AWS 区域中的区域边缘。连接从观察者到外边缘,到内边缘,然后到原点。文档表明存在内部(区域)边缘被绕过的情况,但观察表明这些是例外。

    【讨论】:

    • 惊人的答案...如果可以的话+10! 1.速度测试页面是炸弹!不过,我希望您对下载的“合理描述”是正确的。很高兴看到此页面添加了下载。 2. S3传输加速!谁知道? 3. 我没有寻求定价方面的帮助,因为我认为我可以控制它,但非常感谢您强调位置套利和 S3 Transfer Acceleration 定价的微妙之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2016-06-02
    • 2021-02-17
    • 2012-06-16
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多