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

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

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

我的问题:

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


当前回答

我相信你正在寻找一个更可靠的答案,但我能想到的最明显的客观验证是谷歌推动Django与它的应用程序引擎框架一起使用。如果有人了解并经常处理可伸缩性,那就是谷歌。据我所知,最大的限制因素似乎是数据库后端,这就是为什么谷歌使用他们自己的…

其他回答

请注意,如果您希望每天有10万用户,并且一次活跃数小时(意味着最多有2万+并发用户),那么您将需要大量的服务器。SO有大约1.5万名注册用户,其中大多数人可能不是每天都活跃。虽然大部分流量来自未注册用户,但我猜他们中很少有人在网站上停留超过几分钟(即他们关注谷歌搜索结果后离开)。

对于这样的容量,预计至少需要30台服务器……这仍然是相当沉重的,每台服务器有1000个并发用户。

我有点唱反调:

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

不知道每天的访问量有多少,但这里有一些大型Django站点的例子:

Disqus.com(来自djangocon的演讲) bitbucket。org(写作) lanyrd.com(源) support网站(源代码) Addons.mozilla.org(源代码)(来自django的谈话) Theonion.com网站 uk评论系统使用Django(来源) instagram pinterest rdio

这里是Quora上高流量Django网站的链接。

如果您的站点包含一些静态内容,那么在前面放置一个Varnish服务器将极大地提高您的性能。即使是一个盒子也能轻易产生100 Mbit/s的流量。

注意,对于动态内容,使用像Varnish这样的东西变得更加棘手。

我们正在进行负载测试。我们认为我们可以支持240个并发请求(24x7每秒120次的持续速率),而不会显著降低服务器性能。那就是每小时432000次点击。响应时间并不小(我们的事务很大),但随着负载的增加,基线性能没有下降。

我们使用Apache前端Django和MySQL。操作系统为Red Hat Enterprise Linux (RHEL)。64位。我们在Django的守护模式下使用mod_wsgi。除了接受默认值外,我们没有做任何缓存或数据库优化。

我们都在一台64位戴尔的虚拟机中,(我想)有32Gb内存。

因为对于20或200个并发用户来说,性能几乎是相同的,所以我们不需要花费大量时间进行“调整”。相反,我们只需要通过普通的SSL性能改进、普通的数据库设计和实现(索引等)、普通的防火墙性能改进等来保持我们的基础性能。

我们测量的是我们的负载测试笔记本电脑在15个进程运行16个并发请求线程的疯狂工作负载下挣扎。