AWS Cloudfront延迟:源站获取 vs 互联网

4

在通过Cloudfront从起源获取任何给定文件的第一次获取速度是否比直接通过互联网从起源获取更快?我想知道AWS骨干网是否能以某种方式优于公共互联网。

例如,如果悉尼的用户想要来自欧洲我的S3的文件,并且Cloudfront尚未将其缓存,那么是直接通过互联网获取更快,还是让Cloudfront从欧洲起源获取到悉尼边缘缓存并经由互联网进行最后几个跳转?但这只是一个例子。用户将遍布全球,其中许多人将在欧洲靠近起源。

我理解在向起源发出请求之后,CDN将缓存该文件,并且在文件的TTL内对该文件的来自悉尼的后续请求将更快,但在我的用例中不会经常发生后续请求...

我的S3上有大量小文件(<1MB),很少更改,它们中的每一个单独下载很少,TTL约为1周。

我想知道即使我无法从CDN提供的边界缓存服务中获得太多价值,在此情况下在S3前面放置Cloudfront是否值得。

因此,我是否应该预期在这些第一次获取情况下平均看到任何延迟降低?

编辑:我随后发现这篇文章, 文中提到"持续连接...可以减少总延迟...", 但我怀疑它只是指Cloudfront到源子系统的更佳性能,而不一定是用户端到端的表现更好。

1个回答

8
我在想AWS的骨干网是否能在速度上超过公共互联网。这个想法应该是可以实现的。因为即使不缓存,CloudFront也会进行几项有用的操作,你可以看到整体性能有所提升:
- 最大程度地将流量带到离观众最近的AWS托管网络上,流量在AWS网络上的传输距离比公共互联网短。 - 通过创建两个TCP连接¹(一个从浏览器到CloudFront,另一个从CloudFront到源头)对浏览器和源之间的TCP交互进行分段处理。连接设置,TLS协商以及HTTP请求/响应的来回消息都得到了优化。 - (可选) 提供http/2 to HTTP/1.1网关/转换,允许浏览器在单个http/2连接上同时发出并发请求,同时将这些请求转换为多个独立的HTTP/1.1请求发送到源。
在区域向Internet发送流量的成本和CloudFront边缘向Internet发送流量的成本之间存在一些微小的套利机会。(从EC2/S3到CloudFront的流量不计费)在许多情况下,这些机会对您有利,例如低成本地区的观众访问高成本地区的桶,但它们几乎总是不对称的。伦敦观众和悉尼桶,直接访问该桶时为每GB $0.14,而通过CloudFront访问相同的桶为每GB $0.085。反之,悉尼观众访问伦敦桶时为每GB直接访问$0.09/GB,通过CloudFront访问则为每GB $0.14。伦敦观众/伦敦桶通过CloudFront为每GB $0.085,直接访问桶为每GB $0.09/GB。我长期以来的看法是,这些差异代表了互联网接入成本与AWS私有传输成本之间的比较。通过价格类别功能,您还可以配置CloudFront仅使用较低成本的边缘,但不能保证实际上只使用较低成本的边缘进行流量,而是保证如果未使用较低成本的边缘,则不会向您收取更高的价格。
还要注意,有两个(已知的)服务始终禁用缓存地使用CloudFront:
在存储桶上启用S3 Transfer Acceleration基本上就是一个没有启用缓存的零配置CloudFront分发。Transfer Acceleration与自行提供的CloudFront + S3安排相比只有三个显著区别:具体而言,它可以通过S3理解和接受的带签名的URL(使用S3加上您自己的CloudFront,您必须使用CloudFront带有不同算法的签名URL)和对于地理位置接近存储桶区域的用户,CloudFront网络被绕过,这也消除了该请求的Transfer Acceleration附加费。第三个区别是,它的成本几乎总是比您自己的CloudFront + S3更高。
AWS相信增值的价值足以使得Transfer Acceleration的功能比使用S3 + CloudFront表现更好。我有时会使用它来从直接连接到Bucket的安排中挤出一些优化,因为这是一个很容易的变化。

可以在此页面上找到Transfer Acceleration速度测试并观察其工作原理。虽然这是上传而不是下载,但基本思路是相同的——它可以合理地描绘公共互联网和AWS“边缘网络”(CloudFront基础架构)之间的差异。

API Gateway优化的API也通过CloudFront进行路由以提高性能。虽然API Gateway提供了可选缓存,但它使用的是缓存实例而不是CloudFront缓存。后来,API引入了第二种类型的API端点,它不使用CloudFront,因为当您在同一实际AWS区域内进行请求时,将请求发送到其他硬件就没有必要了。这也使得在自己的CloudFront后面部署API Gateway更加明智,避免了对相同基础设施的不必要的第二次传递。

¹两个TCP连接可能实际上是三个,这应该会进一步提高性能,因为每个连接之间的边界提供了一个内容缓冲区,可以实现更平滑、更快速的传输,并以有利的方式改变带宽延迟乘积。自2016年以来,CloudFront有两个层次的边缘位置,一个是外层的“全球”边缘(最靠近观众),另一个是内部的“区域”边缘(在实际的AWS区域内)。这在文档中有所记录,但文档非常高级,没有很好地解释其基础架构。经验性的观察表明,每个全局边缘都有一个分配给它的“主页”区域边缘,该区域边缘是其最近的AWS区域中的区域边缘。连接从观众,到外围边缘,到内部边缘,然后到源。文档表明,在某些情况下会绕过内部(区域)边缘,但观察结果表明这些情况是例外。

2
太棒了!如果我可以的话,我会给你加10分!1. 速度测试页面真是太棒了!不过,我希望你所说的“合理描述”对于下载是正确的。如果能在这个页面上添加下载功能就太好了。2. S3传输加速!谁知道呢?3. 我没有询问定价方面的帮助,因为我认为我已经掌握了它,但非常感谢你强调了地理套利和S3传输加速定价的微妙之处。 - poshest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接