是否有用例更适合Amazon cloudfront而不是s3,或者相反?我试着通过例子来理解两者之间的区别。


当前回答

Amazon CLOUDFRONT和S3是Amazon Web services提供的两个不同的服务。

Amazon S3是一个存储服务,我们可以在其中存储静态文件,例如:

Css,图片,javascript,视频等等…

CloudFront是一个中间件,它位于用户从AWS请求文件和特定区域的S3数据中心之间,CloudFront用于加快从S3向用户分发静态和动态web内容的速度。

你可以通过一个例子更好地理解它:-

例如,您的S3位于AWS区域美国东部(弗吉尼亚州北部),该数据中心位置用于存储您的文件。

如果来自印度的用户试图从弗吉尼亚州的AWS服务器访问一个文件,那么用户将需要通过请求访问该特定位置,这将花费大量时间。

CloudFront所做的是充当用户和AWS S3之间的中间件。


最常用的文件可以缓存在CloudFront上,它所做的是,它在边缘位置复制这些文件(为了以较低的延迟将内容交付给最终用户,Amazon CloudFront使用一个全球边缘位置网络进行内容交付)。

如果内容已经位于延迟最低的边缘位置,CloudFront将立即交付。如果内容当前不在该边缘位置,CloudFront将从Amazon S3桶中检索它,并尽可能快地将其提供给用户。

从CloudFront到S3的每个请求都被赋予一个新的DNS,因此这将导致更低的流量以及更多的并行请求处理。

以下是截至2016年7月的当前边缘位置列表:-

美国

阿什本,弗吉尼亚州(3) 亚特兰大,乔治亚州 芝加哥, 达拉斯/沃斯堡,德克萨斯州(2) 海沃德, 佛罗里达州杰克逊维尔 加州洛杉矶(2) 佛罗里达州迈阿密, 纽约,纽约州(3) 新泽西纽瓦克 帕洛阿尔托,加州 圣何塞,加利福尼亚州 西雅图,华盛顿州 印第安纳州南本德 密苏里州圣路易斯

欧洲

荷兰阿姆斯特丹(2) 爱尔兰都柏林 德国法兰克福(3) 英国伦敦(3) 马德里,西班牙 法国马赛的 米兰,意大利 法国巴黎(2) 斯德哥尔摩,瑞典 波兰华沙

亚洲

金奈,印度 香港(二) 印度孟买 菲律宾马尼拉 印度新德里 日本大阪 韩国首尔(3) 新加坡(2) 台北,台湾 日本东京(2)

澳大利亚

澳大利亚墨尔本 澳大利亚悉尼

南美

圣保罗,巴西 里约热内卢de Janeiro,巴西

由此你可以得出结论,如果受限的用户来自于你的S3所在的同一地区,那么你不需要使用CloudFront,如果用户数量在全球范围内增加了,那么你肯定应该使用CloudFront来获得更好的延迟和流量控制。

其他回答

Amazon S3专为在特定地理区域内存储大容量、低成本文件而设计。存储和带宽成本相当低。

Amazon CloudFront是一个内容分发网络(CDN),它在尽可能靠近用户的边缘位置代理和缓存web数据。

当最终用户使用此域名请求对象时,他们将自动路由到最近的边缘位置,以高性能地交付您的内容。(亚马逊)

CloudFront提供的数据可能来自S3,也可能不是。由于它对传输速度进行了优化,因此带宽成本略高。

如果您的用户基础是本地化的,那么使用S3或CloudFront不会有太大区别(但是您必须为S3桶选择正确的位置:US、EU、APAC)。如果您的用户群分布在全球,并且速度很重要,CloudFront可能是一个更好的选择。

S3和CloudFront都允许使用域别名,但是CloudFront允许使用多个别名,这样d1.mystatics.com、d2.mystatics.com和d3.mystatics.com都可以指向同一个位置,从而增加了并行下载的容量(这过去是谷歌推荐的,但随着SPDY和HTTP/2的引入,重要性就不那么重要了)。

CloudFront在2014年也支持CORS(感谢sergiopantoja)。

*注意:从2015年开始,S3现在可以自动复制到其他区域。

另一个主要区别是CloudFront允许您在服务器上镜像站点。然后Cloudfront使用其内容传输网络缓存图像、mp3或视频等文件。

这使您不必像使用Amazon S3时那样复制资产。

但是,在文件过期后,CloudFront将从您的活动站点再次获取它(以成本为代价)。因此,云前端最适合访问频繁的文件,而不太适合访问不频繁的文件。

为apache设置文件过期的一种方法是在.htaccess中。例如

<filesMatch "\\.(mp3|mp4)$">
Header set Cache-Control "max-age=648000, private"
</filesMatch>

Amazon S3是一个简单的存储服务,可以使用大量的信息,如视频、图像、PDF等。

CloudFront是一个内容交付网络,它更接近最终用户,用于在尽可能短的时间内使Amazon S3上的信息可用。

一个示例用例是视频点播。

你把你的视频存储在一个地方。S3存储了所有预先录制的不同格式的视频。 你有全局用户案例 CloudFront用于将视频缓存到边缘位置。这可以用于将内容交付给最终用户。位置将根据最近的物理边缘位置自动拾取。目前大约有51个边缘位置。

在正确的用例中使用CloudFront的一些优点:

改进的延迟——更好的终端用户体验。 可能降低数据传输成本。由于数据不是每次都从特定AWS区域的同一个S3桶传输。

其他可能的用例:

在线直播 游戏 网站加速

这里忽略的一个方面是:

在较高的使用级别上,Amazon Cloudfront还提供比Amazon S3更低的价格。

Cloudfront CDN用于跨地理分布的多个服务器分发内容 JS (CSS) 而s3更多的是每个用户使用较少的资源存储(用户图像,pdf)。

你可以从s3桶中提供Cloudfront资源,完全绕过你的web服务器。

(在web服务器预编译和存储图像和java脚本的情况下很有用。将它们存储在s3上意味着您的服务器内存占用减少)

例子:在Heroku Slugs上(编译的应用程序大小可以通过使用s3来减少,并将其包装为云前端CDN将提高吞吐量)

在S3上使用CloudFront的另一种情况是,您可以在CloudFront中使用SSL证书到自定义域,而在S3中则不能。一个很好的理由!