为什么不鼓励使用django在生产环境中提供静态文件?

问题描述 投票:0回答:3

我开发了一个使用(显然)使用一些静态文件的Web应用程序,为了进行部署,我选择使用WSGI解释器为这些文件提供服务,并将其用于防火墙和反向代理后面的作业。

我的应用程序使用whitenoise来存储静态文件:一切正常,并且性能方面没有任何问题...但是,实际上,我不明白为什么不推荐使用不鼓励使用WSGI解释器直接提供这些静态文件的做法( LINK ),说:

这不适合生产使用! 对于一些常见的部署策略...

我的意思是,我的服务是微服务的集合:DB-Frontend-Services-Etc ...如果我需要扩展它们,那么我可以毫无问题地做到这一点,此外,使用这种理念,我也不担心微服务的足迹:对我来说,这似乎合乎逻辑,但对于世界其他地区而言,这完全是一种过时的策略。

django docker microservices gunicorn static-files
3个回答
3
投票

您误解了该文档。 使用Whitenoise投放静态文件很好; 这完全是它的目的。 这样做不是一个好主意,因为它效率低下,所以要使用该内部Django函数来执行此操作。


2
投票

我亲自从CDN提供静态服务的三个原因,

1-您正在耗尽应用服务器的带宽,浪费了获取这些静态文件的时间,而不是将负载扔给CDN来处理所有这些问题。 (WhiteNoise应该消除这种情况)

2-某些托管服务(例如AWS)会向您收取额外的进/出流量费用,而您可以使用更便宜的服务(例如Cloudfront和S3存储桶)。

3-我希望仅将我的应用服务器保留为应用目的,并仅将每种服务用于其工作,这有助于调试和减少故障点。

但另一方面,使用WhiteNoise之类的功能从应用程序服务器提供静态服务比配置CDN容易得多。

希望这可以帮助!


2
投票

使用Whitenoise可以,因为:

  1. 白噪声正是为此目的而制作的,因此有效
  2. 它将正确设置HTTP响应标头,以便客户端缓存文件。

但是,您可以这样考虑:您通常不会再为每个网页提供1或2个请求,而通常会获得10倍以上的请求(通常,网页将请求一堆图像,一个或多个CSS文件,几个js文件。 )。 这意味着,与将工作交给CDN相比,您必须扩展应用服务器才能平均提供10倍的流量。

顺便说一句,我已经写了一个有关此主题的教程 ,可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.