使用AWS S3与Cloudfront

时间:2014-08-21 09:16:36

标签: django heroku amazon-web-services amazon-s3 amazon-cloudfront

由于heroku文件系统是短暂的,我计划在heroku上使用AWS作为我的django项目的静态资源

我看到两篇相互矛盾的文章建议使用AWS S3。这个说使用S3

https://devcenter.heroku.com/articles/s3

虽然下面的另一个说法,但S3有缺点,而是使用Cloudfront CDN

https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn

  

许多开发人员使用亚马逊的S3服务来提供静态服务   先前已上载的资产,可手动或由某些资产上传   构建过程的形式。虽然这有效,但不建议这样做   S3被设计为文件存储服务,而不是为了实现最佳交付   加载的文件。因此,从S3提供静态资产不是   推荐使用。

3 个答案:

答案 0 :(得分:4)

Amazon CloudFront是一个内容交付网络(CDN),可与S3等其他Amazon Web Services集成,为我们提供了一种以低延迟,高数据传输速度向最终用户分发内容的简便方法。

CloudFront使您的静态文件可以从世界各地的数据中心(称为边缘位置)获得。当访问者从您的网站请求文件时,他或她将被无形地重定向到最近边缘位置的文件副本(现在AWS在全球范围内有大约35个边缘位置),这导致下载时间比访问者访问了位于特定区域的S3存储桶中的内容。

因此,如果您的用户群分布在世界各地,那么使用CloudFront的更好选择如果您的用户已本地化,则使用CloudFront而不是S3(但在这种情况下,您需要为您的选择选择正确的位置) S3桶:美国东部,美国西部,亚太地区,欧盟,南美洲等)

Comparative features of Amazon S3 and CloudFront

答案 1 :(得分:3)

我的建议是在Whitenoise之上使用CloudFront。您将直接从Heroku应用程序提供静态资产,但是一旦达到规模,CloudFront将作为CDN接管。

Whitenoise从根本上简化了构建过程以及使用复杂缓存标头的需求。

阅读http://whitenoise.evans.io/en/latest/了解完整宣言。

(请注意,Whitenoise仅适用于与您的应用捆绑在一起的静态资产,而不适用于用户上传的文件,这些文件仍需要S3才能正常存储。但您仍然希望使用CF.)

答案 2 :(得分:2)

实际上,你应该同时使用两者。

CloudFront仅充当CDN,这基本上意味着它在全球的边缘位置缓存资源。为了使其工作,它必须首先从原始位置下载这些资源,无论它们何时到期或尚不存在。

CloudFront分配可以具有两种可能的原始类型之一。 S3或EC2。在您的情况下,您应该将资产存储在S3中并将存储桶连接到CloudFront分配。使用CloudFront链接实际提供资产,使用S3进行存储。

这将确保最佳性能,以及正确和可扩展的负载处理。

希望这会有所帮助,如果您在评论部分需要其他信息,请与我们联系。