Django的规模如何?

问题

所以我一直在Django-ing几个月*。 我发现自己处于一个位置,我可以为任何代码编写一个Django网络应用程序,但由于我的无能为力而感到恐惧**,无法想出如何构建Django Web应用程序的解决方案, LARGE)观众。 很高兴知道Django至少可以扩展。

我是怎么想的

似乎需要有相当大的知识飞跃才能理解如何(更不用说实际执行)扩展Django Web应用程序。 我这样说是因为我的研究给了我一个印象,即缩放(或启用可扩展性)是一个将售后解决方案适用于Web应用程序的不同组件以提高这些组件的性能的过程。

There'sjustsomanythings ~~

所以有很多解决方案和一大堆组件 。 例如,用于托管的Elastic Beanstalk,Django的缓存框架,用于缓存的 Memcached和Varnish,用于数据库的 Cassandra,Redis和PostgreSQL,以及用于部署的 uWSGI,Nginx和Apache。 无论如何,如果我认为是对的。 我仍然不确定。

我需要的

我渴望成为这个问题的典型答案的那个惊人的反应,但是也希望从哪里开始,或者提供解决问题的方法的建议,或者您对Django进行扩展的方法。 预先感谢你已经完成了智慧的话语。 <<编辑:所以不赞成:(

全新和独家:STACKOVERFLOW的问题!

我需要的

为了提高我构建的Django网络应用程序的扩展准备,我应该做什么/实现哪些最重要/最有效的事情? 列出方法,并解释他们如何帮助会很好。


*我一直在作弊。 我在Pythonanywhere上部署,到目前为止只使用Sqlite3。 迄今为止,我还设法保留了WSGI / Apache部署内容。

** Django是我第一次通过编程创造价值的东西。 之前,我只使用Pascal在Runescape和Java上作弊,制作了一些低劣的Android应用程序。 这也许可以解释为什么我觉得这是一个巨大的飞跃。


最初我真的不会太担心。 也就是说,这里有一些关于如何考虑扩展Django应用程序的想法。

高速缓存

根据您的应用程序的不同,高速缓存确实非常有用。 当然,对于任何读写比例较高的应用程序,例如博客或内容管理系统,实现缓存是毫不费力的。 对于其他类型的网站,您可能需要更加小心,但是Django缓存框架使您可以直接定制缓存如何适用于您的应用程序。

Memcached通过Django缓存很容易设置,而且它坚实可靠。 它可能应该是您作为缓存后端的默认选择。

芹菜

如果您的Web应用程序在后台执行任何可观数量的任务,而这些任务在相同的HTTP请求期间不需要完成,那么您应该考虑使用Celery在单独的任务中执行它们。

举个例子:在我建立的Django应用程序上,可以选择发送电子邮件给客户,并附上报告的PDF副本。 由于电子邮件不需要在相同的HTTP请求中发送,因此我将该任务交给了Celery。 现在,当应用程序收到HTTP请求时,它只是推送请求将该电子邮件发送到消息队列中。 芹菜进程接受这个任务并分别处理它。

理论上说,当你的网络应用变得足够大时,任务可以在完全独立的机器上处理。

网络服务器

似乎普遍接受的是,使用Django提供静态内容和动态内容是一个糟糕的主意。 我使用的解决方案似乎相当典型,并使用两台Web服务器:

  • Nginx运行在端口80上。它为所有静态文件提供服务,并将所有其他代理反向代理到另一个端口
  • Gunicorn运行在其他端口上,它提供动态内容,Supervisor用于运行Gunicorn进程
  • 这种一般想法有多种变体,但这种两种服务器方法似乎很常见。 你也可以考虑使用像Amazon S3这样的东西来托管静态文件。

    花时间缩短静态文件以提高性能也是值得的。 使用像Grunt这样的工具,可以轻松地连接和缩小JavaScript和CSS文件,以便只下载每个需要的文件,而不是包含需要单独下载的许多文件。

    数据库

    MySQL或Postgresql都可以。 两者都是在许多网站上用于生产的可靠数据库。

    正如我上面所说的那样,缩放应用程序在早期应该不会太担心。 但是,它有助于熟悉您需要使用的策略类型。

    链接地址: http://www.djcxy.com/p/53443.html

    上一篇: What does it take to scale Django?

    下一篇: What goes in to making a web site that needs to scale?