我正在用Django构建一个web应用程序。我选择Django的原因是:

我想使用免费/开源工具。 我喜欢Python,觉得它是一种长期的语言,而对于Ruby,我不确定,而PHP似乎是一个巨大的麻烦。 我正在为一个想法构建一个原型,并没有过多地考虑未来。开发速度是主要因素,而且我已经了解Python。 我知道迁移到谷歌应用程序引擎将更容易,如果我选择这样做在未来。 我听说Django很“不错”。

现在我越来越接近于考虑出版我的作品,我开始担心规模问题。我找到的关于Django伸缩能力的唯一信息是Django团队提供的(我不是说什么要忽略它们,但这显然不是客观的信息…)

我的问题:

目前在Django上构建的“最大”站点是什么?(我主要通过用户流量来衡量规模) Django能每天处理10万名用户,每个用户访问站点几个小时吗? 像Stack Overflow这样的站点可以在Django上运行吗?


当前回答

我有点唱反调:

你应该看看calhenderson在Django con 2008的主题演讲,标题是“为什么我讨厌Django”,他在演讲中详细介绍了Django在高流量网站中所缺少的所有功能。最后,你必须以开放的心态看待这一切,因为编写可伸缩的Django应用程序是完全可能的,但我认为这是一个很好的演示,与你的问题相关。

其他回答

如果你想使用开源,那么你有很多选择。但是python是其中最好的,因为它有很多库和一个超级棒的社区。 下面这些原因可能会改变你的想法:

Python is very good but it is a interpreted language which makes it slow. But many accelerator and caching services are there which partly solve this problem. If you are thinking about rapid development then Ruby on Rails is best among all. The main motto of this(ROR) framework is to give a comfortable experience to the developers. If you compare Ruby and Python both have nearly the same syntax. Google App Engine is very good service but it will bind you in its scope, you don't get chance to experiment new things. Instead of it you can use Digital Ocean cloud which will only take $5/Month charge for its simplest droplet. Heroku is another free service where you can deploy your product. Yes! Yes! What you heard is totally correct but here are some examples which are using other technologies Rails: Github, Twitter(previously), Shopify, Airbnb, Slideshare, Heroku etc. PHP: Facebook, Wikipedia, Flickr, Yahoo, Tumbler, Mailchimp etc.

结论是一个框架或语言不会为你做所有的事情。一个更好的架构,设计和策略会给你一个可扩展的网站。Instagram是最大的例子,这个小团队管理着如此庞大的数据。这里有一个关于它的架构的博客,一定要读。

尽管这里有很多很棒的答案,我只是想指出,没有人强调…

这取决于应用程序

如果你的应用程序写得比较少,因为你从DB中读取的数据比写的数据要多得多。然后缩放django应该是相当简单的,见鬼,它带来了一些相当不错的输出/视图缓存直接开箱即用。利用这一点,比如说,redis作为一个缓存提供商,在它前面放置一个负载均衡器,旋转n个实例,你应该能够处理非常大量的流量。

现在,如果你一秒钟要做几千个复杂的写?不同的故事。Django是一个糟糕的选择吗?好吧,不一定,这取决于您如何构建解决方案,以及您的需求是什么。

这只是我的个人意见:-)

问题是不知道django是否可以伸缩。

正确的方法是理解和知道哪些网络设计模式和工具应该放在django/symfony/rails项目下,以实现良好的扩展性。

一些想法可以是:

多路复用。 反向代理。例如:Nginx,清漆 Memcache会话。例如:Redis 在项目和数据库上进行集群化,以实现负载平衡和容错:例如:Docker 使用第三方存储资产。例子:Amazon S3

希望它能有所帮助。这是我的小石头。

你完全可以用Django运行一个高流量的站点。看看这篇在django 1.0之前但仍然相关的文章:http://menendez.com/blog/launching-high-performance-django-site/

我使用Django的经验很少,但我记得在Django书中有一章他们采访了运行一些大型Django应用程序的人。这里有一个链接。我想这能提供一些启示。

它说curse.com是最大的Django应用程序之一,每月有6000万到9000万的页面浏览量。