扩展Django需要什么?

时间:2014-03-14 18:14:37

标签: django caching web-applications scalability scaling

问题

所以我已经在Django-ing工作了好几个月*。我发现自己处于这样一个位置,我可以编写一个Django网络应用程序,但我很害怕我无法提出如何构建一个Django Web应用程序的解决方案大(大)观众。很高兴知道Django scales,至少。

我是怎么想的

似乎需要有一个相对较大的知识飞跃来理解如何(更不用说实际执行)扩展Django Web应用程序。我这样说是因为我的研究给我的印象是,扩展(或支持可扩展性)是一个为网络应用程序的不同组件提供售后解决方案的过程,以提高每个组件的性能。

有' sjustsomanythings ~~

因此,有大量的解决方案和一堆组件。例如,{strong>托管,Elastic BeanstalkDjango's cache frameworkMemcached用于缓存Varnish数据库CassandraRedisPostgreSQL,以及uWSGI Nginx Apache 用于部署。无论如何,如果我认为是对的。我还不确定。

我需要什么

我渴望这个惊人的回应成为这个问题的规范答案,但也会欣赏导致从哪里开始,或者采取解决问题的方法的建议,或者扩展Django的方法。提前感谢您所做的那些智慧之词。<< 编辑:SO不赞成:(

全新& EXCLUSIVE:STACKOVERFLOW的问题!

我需要什么

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


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

** Django就是我第一次通过编程创造了一些有价值的东西。以前,我只使用Pascal欺骗Runescape和Java来制作一些糟糕的Android应用程序。这也许可以解释为什么我觉得这是一个很大的飞跃。

1 个答案:

答案 0 :(得分:4)

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

缓存

根据您的应用程序的不同,缓存确实非常有用。当然,对于任何具有高比例读写的应用程序,例如博客或内容管理系统,然后实现缓存是一个明智的选择。对于其他类型的站点,您可能需要更加小心,但是Django缓存框架可以直接自定义缓存如何为您的应用程序工作。

使用Django缓存很容易设置Memcached,它坚固可靠。它应该是您作为缓存后端的默认选择。

芹菜

如果您的Web应用程序在后台执行了大量相同数量的任务,而这些任务在同一HTTP请求期间无需执行,那么您应该考虑使用Celery在单独的任务中执行它们。

例证:在我构建的Django应用程序上,可以选择向客户端发送电子邮件,附上报告的PDF副本。由于无需在同一HTTP请求中发送电子邮件,因此我将该任务交给了Celery。现在,当应用程序收到HTTP请求时,它只是将请求发送到消息传递队列。 Celery进程接受此任务并单独处理。

理论上,当您的网络应用程序变得足够大时,可以在完全独立的计算机上处​​理任务。

Web服务器

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

  • Nginx在端口80上运行。它为所有静态文件提供服务,并将其他所有内容反向代理到其他端口
  • Gunicorn在另一个端口运行,它提供动态内容,Supervisor用于运行Gunicorn进程

这个概念存在各种变体,但这种两种服务器方法似乎很常见。您还可以考虑使用Amazon的S3来托管静态文件。

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

数据库

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

正如我说的更高,在早期扩展你的应用程序不应该太过关注。但是,熟悉您需要使用的策略是有帮助的。