是否有用例更适合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来获得更好的延迟和流量控制。
其他回答
CloudFront和S3 Bucket是不一样的。通俗地说:CloudFront使您能够通过边缘位置的内容交付网络(CDN)加速web内容的内容交付,而S3桶是您存储实际文件的地方。CloudFront的源代码不一定来自S3,但为了更容易地可视化S3与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>
在S3上使用CloudFront的另一种情况是,您可以在CloudFront中使用SSL证书到自定义域,而在S3中则不能。一个很好的理由!
这里忽略的一个方面是:
在较高的使用级别上,Amazon Cloudfront还提供比Amazon S3更低的价格。
Cloudfront CDN用于跨地理分布的多个服务器分发内容 JS (CSS) 而s3更多的是每个用户使用较少的资源存储(用户图像,pdf)。
你可以从s3桶中提供Cloudfront资源,完全绕过你的web服务器。
(在web服务器预编译和存储图像和java脚本的情况下很有用。将它们存储在s3上意味着您的服务器内存占用减少)
例子:在Heroku Slugs上(编译的应用程序大小可以通过使用s3来减少,并将其包装为云前端CDN将提高吞吐量)
推荐文章
- 警告:未受保护的私钥文件!当尝试SSH到Amazon EC2实例时
- 使用boto3连接CloudFront时,如何选择AWS配置文件
- 在亚马逊云服务器上设置FTP
- 无法将图像推送到Amazon ECR -由于“没有基本的身份验证凭据”而失败
- 如何测试AWS命令行工具的凭据
- 将Keypair添加到现有的EC2实例中
- AWS S3:您试图访问的桶必须使用指定的端点寻址
- 你会因为EC2上的“停止”实例而被收费吗?
- 下载一个已经上传的Lambda函数
- S3 - Access-Control-Allow-Origin头
- 何时使用Amazon Cloudfront或S3
- 如何处理错误与boto3?
- 什么数据存储在亚马逊EC2实例的临时存储?
- boto3 client NoRegionError:只能在某些时候指定区域错误
- AWS ssh访问“权限被拒绝(publickey)”问题