所以我已经在Django-ing工作了好几个月*。我发现自己处于这样一个位置,我可以编写一个Django网络应用程序,但我很害怕我无法提出如何构建一个Django Web应用程序的解决方案大(大)观众。很高兴知道Django scales,至少。
似乎需要有一个相对较大的知识飞跃来理解如何(更不用说实际执行)扩展Django Web应用程序。我这样说是因为我的研究给我的印象是,扩展(或支持可扩展性)是一个为网络应用程序的不同组件提供售后解决方案的过程,以提高每个组件的性能。
因此,有大量的解决方案和一堆组件。例如,{strong>托管,Elastic Beanstalk,Django's cache framework和Memcached用于缓存,Varnish, 数据库的Cassandra,Redis和PostgreSQL,以及uWSGI, Nginx 和 Apache 用于部署。无论如何,如果我认为是对的。我还不确定。
我渴望这个惊人的回应成为这个问题的规范答案,但也会欣赏导致从哪里开始,或者采取解决问题的方法的建议,或者扩展Django的方法。提前感谢您所做的那些智慧之词。<< 编辑:SO不赞成:(
我应该做/实施的3个最重要/最有效的事情是什么,以提高我为构建的Django网络应用程序的扩展做好准备?列出方法,并解释它们如何帮助会很好。
*我一直在作弊。我在Pythonanywhere上部署,到目前为止只使用了Sqlite3。到目前为止,我还设法保持对WSGI / Apache部署内容的清理。
** Django就是我第一次通过编程创造了一些有价值的东西。以前,我只使用Pascal欺骗Runescape和Java来制作一些糟糕的Android应用程序。这也许可以解释为什么我觉得这是一个很大的飞跃。
答案 0 :(得分:4)
我最初不会太担心它。也就是说,这里有一些关于如何考虑扩展Django应用程序的想法。
根据您的应用程序的不同,缓存确实非常有用。当然,对于任何具有高比例读写的应用程序,例如博客或内容管理系统,然后实现缓存是一个明智的选择。对于其他类型的站点,您可能需要更加小心,但是Django缓存框架可以直接自定义缓存如何为您的应用程序工作。
使用Django缓存很容易设置Memcached,它坚固可靠。它应该是您作为缓存后端的默认选择。
如果您的Web应用程序在后台执行了大量相同数量的任务,而这些任务在同一HTTP请求期间无需执行,那么您应该考虑使用Celery在单独的任务中执行它们。
例证:在我构建的Django应用程序上,可以选择向客户端发送电子邮件,附上报告的PDF副本。由于无需在同一HTTP请求中发送电子邮件,因此我将该任务交给了Celery。现在,当应用程序收到HTTP请求时,它只是将请求发送到消息传递队列。 Celery进程接受此任务并单独处理。
理论上,当您的网络应用程序变得足够大时,可以在完全独立的计算机上处理任务。
似乎普遍认为使用Django提供静态内容和动态内容是一个坏主意。我使用的解决方案似乎相当典型,并使用两个Web服务器:
这个概念存在各种变体,但这种两种服务器方法似乎很常见。您还可以考虑使用Amazon的S3来托管静态文件。
在花时间缩小静态文件以提高性能方面,这也是值得的。使用像Grunt这样的工具,可以很容易地连接和缩小JavaScript和CSS文件,这样每个文件只需要下载一个,而不是包含许多需要单独下载的文件。
MySQL或Postgresql都可以。两者都是在许多网站上用于生产的可靠数据库。
正如我说的更高,在早期扩展你的应用程序不应该太过关注。但是,熟悉您需要使用的策略是有帮助的。