由于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提供静态资产不是 推荐使用。
答案 0 :(得分:4)
Amazon CloudFront是一个内容交付网络(CDN),可与S3等其他Amazon Web Services集成,为我们提供了一种以低延迟,高数据传输速度向最终用户分发内容的简便方法。
CloudFront使您的静态文件可以从世界各地的数据中心(称为边缘位置)获得。当访问者从您的网站请求文件时,他或她将被无形地重定向到最近边缘位置的文件副本(现在AWS在全球范围内有大约35个边缘位置),这导致下载时间比访问者访问了位于特定区域的S3存储桶中的内容。
因此,如果您的用户群分布在世界各地,那么使用CloudFront的更好选择如果您的用户已本地化,则使用CloudFront而不是S3(但在这种情况下,您需要为您的选择选择正确的位置) S3桶:美国东部,美国西部,亚太地区,欧盟,南美洲等)
答案 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进行存储。
这将确保最佳性能,以及正确和可扩展的负载处理。
希望这会有所帮助,如果您在评论部分需要其他信息,请与我们联系。