Django 可扩展吗?

我正在使用 Django 构建 Web 应用程序。我选择 Django 的原因是:

  • 我想使用免费 / 开源工具。
  • 我喜欢 Python,并认为它是一种长期的语言,而对于 Ruby,我不确定,PHP 似乎是一个学习上的麻烦。
  • 我正在为一个想法构建原型,并且对未来没有太多考虑。开发速度是主要因素,我已经了解 Python。
  • 我知道,如果将来我选择迁移到 Google App Engine,将会更容易。
  • 我听说 Django 很 “不错”。

现在,我开始考虑发布作品了,我开始担心规模。我发现的有关 Django 扩展功能的唯一信息是 Django 团队提供的(我并不是说要忽略它们,但这显然不是客观信息...)。

我的问题:

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

答案

  1. “当今在 Django 上最大的网站是什么?”

    没有一个地方可以收集有关 Django 构建的网站上的流量的信息,因此我将不得不使用来自不同位置的数据来刺探它。首先, 在 Django 项目主页的首页上有 Django 站点列表,然后在djangosites.org 上有 Django 构建的站点列表。浏览列表并挑选一些我知道流量不错的网站,我们看到:

  2. “Django 每天可以处理 100,000 个用户,每个用户访问网站几个小时吗?”

    是的,请参见上文。

  3. “像 Stack Overflow 这样的网站可以在 Django 上运行吗?”

    我的直觉是肯定的,但是正如其他人回答并且 Mike Malone 在演讲中提到的那样,数据库设计至关重要。如果我们可以找到任何可靠的流量统计信息,也可以在 www.cnprog.com 上找到有力的证明。无论如何,将一堆 Django 模型放在一起不仅仅是发生的事情:)

当然,还有更多感兴趣的网站和博客作者,但是我必须在某个地方停下来!


关于使用 Django 构建高流量网站 michaelmoore.com 的博客文章, 描述为排名前 10,000 的网站Quantcast 统计信息Competition.com 统计数据


(*)编辑的作者,包括此类参考文献,曾在该项目中担任外包开发人员。

我们正在进行负载测试。我们认为我们可以支持 240 个并发请求(持续 24x7 的每秒 120 次命中),而服务器性能没有任何显着降低。那将是每小时 432,000 次点击。响应时间并不短(我们的交易量很大),但是随着负载的增加,我们的基准性能不会降低。

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

我们全都位于具有(我认为)32Gb RAM 的 64 位 Dell 上的一个 VM 中。

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

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

不确定每天的访问次数,但以下是一些大型 Django 网站的示例:

这是Quora高流量 Django 站点列表的链接。

今天在 Django 上构建的 “最大” 网站是什么? (我主要通过用户流量来衡量规模)

在美国,是玛哈洛(Mahalo) 。有人告诉我他们每个月处理大约 1000 万个唯一身份。现在,在 2019 年,Mahalo 由 Ruby on Rails 提供支持。

国外, Globo网络(巴西新闻,体育和娱乐网站的网络); Alexa 将其排在全球前 100 名(目前排名第 80 位)。

Django 的其他知名用户包括 PBS,国家地理杂志,探索号,NASA(实际上是 NASA 中的许多不同部门)和国会图书馆。

Django 每天可以处理 10 万个用户,每个用户访问该网站几个小时吗?

是的 - 但前提是您正确编写了应用程序,并且拥有足够的硬件。 Django 不是万能的子弹。

像 StackOverflow 这样的网站可以在 Django 上运行吗?

是的(但见上文)。

从技术角度出发 ,轻而易举:尝试一下 soclone 。在流量方面,每月以不超过一百万的唯一身份竞争钉住 StackOverflow。我可以命名至少十个 Django 网站,其流量比 SO 多。

扩展 Web 应用程序与 Web 框架或语言无关,而与您的体系结构有关。它涉及到如何处理浏览器缓存,数据库缓存,如何使用非标准持久性提供程序(例如CouchDB ),数据库的调整方式以及许多其他内容。

扮演恶魔的拥护者:

您应该查看Cal Henderson提供的DjangoCon 2008 主题演讲 ,题目为 “为什么我讨厌 Django”,其中他几乎涵盖了您可能想在高流量网站中执行的 Django 缺少的所有事项。在这一天结束时,你有,因为它完全可以编写 Django 的应用包含的规模借此所有以开放的心态,但我认为这是一个很好的介绍和有关你的问题。

我知道的最大的 django 网站是《 华盛顿邮报》 ,这肯定表明它可以很好地扩展。

好的设计决策可能会对性能产生更大的影响。 Twitter 通常被认为是一个网站,它通过另一个基于动态解释语言的 Web 框架 Ruby on Rails 来体现性能问题,但 Twitter 工程师表示,该框架并没有像他们早先做出的某些数据库设计选择那样重要。上。

Django 与 memcached 配合得很好,并提供了一些用于管理缓存的类,您可以在其中解决大部分性能问题。在线交付的内容实际上比后端要重要的多 - 使用 yslow 之类的工具对于高性能 Web 应用程序至关重要。您始终可以在后端投入更多的硬件,但不能更改用户带宽。

我上周参加了 EuroDjangoCon 会议,这是几场讲座的主题 - 包括最大的基于 Django 的网站 Pownce 的创建者( 这里的一个演讲的幻灯片)。主要信息是您不必担心 Django,而需要进行适当的缓存,负载平衡,数据库优化等工作。

Django 实际上对大多数这些东西都有钩子 - 特别是缓存非常容易。

我确定您正在寻找一个更可靠的答案,但是我能想到的最明显的客观验证是 Google 推动 Django 与它的App Engine框架一起使用。如果有人定期了解并处理可扩展性,那就是 Google。根据我的阅读,最大的限制因素似乎是数据库后端,这就是 Google 使用自己的数据库的原因...

如高性能Django 书中所述,并通过本Cal Henderson

请参阅下面提到的更多详细信息:

听到人们说“Django 无法扩展”的情况并不少见。根据您的看法,该陈述是完全正确的,也可能是完全错误的。 Django 本身无法扩展。

Ruby on Rails,Flask,PHP 或数据库驱动的动态网站使用的任何其他语言也可以这样说。

不过,好消息是 Django 与一套缓存和负载平衡工具进行了精美的交互,这使它可以扩展到可以提供的最大流量。

与您在网上阅读的内容相反,它可以这样做,而无需替换通常标为 “过慢” 的核心组件,例如数据库 ORM 或模板层。

Disqus 每月提供超过 80 亿的页面浏览量。那些数字很大。

这些团队已经证明 Django 确实可以扩展。我们在林肯环路的经验对此提供了支持。

我们已经建立了大型的 Django 网站,这些网站可以在 Reddit 主页上度过一天而又不费吹灰之力。

到目前为止,Django 的扩展成功案例几乎不胜枚举。

它支持 Disqus,Instagram 和 Pinterest。需要更多证据吗? Instagram 仅 3 位工程师(其中 2 位没有后端开发)就能在 Django 上维持超过 3000 万用户