Django可扩展吗?[关闭]


1135

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

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

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

我的问题:

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

2
如果您还没有,我建议阅读Django书中有关缩放的部分:djangobook.com/en/1.0/chapter20或较新的版本:djangobook.com/en/2.0/chapter12
monkut,2009年

15
可能想修复“速度是主要因素”以澄清您是在谈论执行速度还是开发工作。听起来像是在努力开发,这很有意义。
S.Lott,2009年

6
将其与RoR进行比较会很有趣。
Kozyarchuk

6
@ ajkumar25,AFAIK disqus使用djangoblog.disqus.com/post/62187806135/…
alxs 2015年

6
这个问题应该是what's the cost of scaling in the Django?
斯瓦沃米尔Lenart

Answers:


932
  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统计数据


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


267

我们正在进行负载测试。我们认为我们可以支持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个请求并发线程的进程的疯狂工作量下苦苦挣扎。


3
也很好奇:您的数据库是在同一台计算机上运行还是在单独的服务器上运行?
Jarret Hardie

16
一台具有Apache,Django和MySQL的VM。mod_wsgi。RHEL。
S.Lott

4
绩效指标是否有任何更新?
SexyBeast

1
您的观点很不错-如果您将网站访问量视为一个队列,那么每小时可以提供多少响应?如果缩短响应时间,则可以提供更多服务,并具有“更大的可扩展性”-如果您使用Django,Twisted,Rails或Zod星球的技术,这并不重要。
拉尔夫·博尔顿

2
我已经与Django一起工作了多年,除了玩具应用程序(大多数都是只读的)以外,我从未见过这种性能。您的应用程序的性质是什么?没有模板,中间件,会话或数据库连接的任何东西,如果没有大量的缓存来绕开所有这些,永远不会支持每秒120个匹配。
塞林


107

今天在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多。


2
您能否使用Django估算出每秒5000次点击的大概价格(假设其像linkedin一样)。假设普通的程序员已经构建了站点,并且当然增加了缓存。假设还没有使用算法等(使事情更快),因为我还没有。
user2349115 2015年

5
@ user2349115,当您的应用程序每秒获得5000次点击时,您将具有足够的背景知识来理解为什么这是一个错误的问题。
Kye R

我的忍者(wrappalyzer浏览器扩展程序)说,mahalo在2019
Miles Davis,

87

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


Web框架很重要!看看与其他python网络框架相比,龙卷风有多快:tornadoweb.org/documentation#performance
Joshua Partogi 2010年

我没有拒绝投票,但我想您在讨论django的优点时走了一些话题,您不能在每个给定的框架中使用每个数据库,调整数据库并在最大程度上使用ouchdb。当然,除非您不重写它的大部分。
ZJR

8
@ZLR我不相信我走题。他问Django是否可以扩展,我
同意

是的,按照Tornado示例,阻塞与非阻塞IO 确实很重要。尽管已经说过,Tornado不是Web框架,但是您的应用程序将需要以利用非阻塞IO的方式编写。
罗伯·格兰特

使用Tornado,编写阻塞IO代码非常容易。而且这并不会带来很高的并发性。框架实际上并不重要。
Shiplu Mokaddim '19

80

扮演恶魔的拥护者:

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


3
另外,Flickr不是一天建成的。
Deniz Dogan

34
Cal似乎遇到的
Dolph

51

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

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

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


1
不只是washingtonpost.com的一部分在Django上运行?Django的首页似乎表明它只是projects.washingtonpost.com/congress
Xiong Chiamiov 09年

3
您也许将《华盛顿邮报》与《华盛顿时报》相混淆。我相信《泰晤士报》全都在Django上,但这是一本小得多的论文。
伊莱(Eli)

32

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

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


24

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


推广Django / Python可能与Google推广Python作为C ++之后的“其他”语言选择的政策更相关?
GuruM 2014年

当我不得不使用GAE时,它非常接近像Tornado之类的东西
Luis Masuelli 2015年

18

如高性能 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万用户


17

今天,我们使用许多Web应用程序和网站来满足我们的需求。它们中的大多数非常有用。我将向您展示python或django使用的其中一些。

华盛顿邮报

《华盛顿邮报》的网站是伴随他们的每日报纸而广为流行的在线新闻来源。Django Web框架可以轻松处理其大量的视图和流量。 Washington Post - 52.2 million unique visitors (March, 2015)

美国宇航局

国家航空航天局的官方网站是查找有关其正在进行的太空探索的新闻,图片和视频的地方。这个Django网站可以轻松处理大量的视图和流量。 2 million visitors monthly

守护者

《卫报》是英国《卫报》媒体集团所有的新闻和媒体网站。它几乎包含了《卫报》和《观察家》报纸的所有内容。这些巨大的数据由Django处理。 The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)

的YouTube

我们都知道YouTube是上传猫视频的地方,但失败了。作为现有的最受欢迎的网站之一,它为我们提供了无尽的视频娱乐时间。Python编程语言为其提供了强大支持,并为我们所喜爱的功能提供了支持。

投递箱

DropBox引发了在线文档存储革命,这已成为日常生活的一部分。现在,我们几乎将所有内容都存储在云中。Dropbox使我们能够使用Python的功能存储,同步和共享几乎所有内容。

调查猴子

Survey Monkey是最大的在线调查公司。他们每天可以在重写的Python网站上处理超过一百万个响应。

Quora

Quora是在线提问和接收社区答案的第一人。这些社区成员在他们的Python网站上回答,编辑和组织了相关结果。

有点

Bitly URL缩短服务和分析的大多数代码都是使用Python构建的。他们的服务每天可以处理数亿个事件。

Reddit

Reddit被称为互联网的首页。这是一个在线查找基于数千种不同类别的信息或娱乐的地方。帖子和链接由用户生成,并通过投票提升到顶部。Reddit的许多功能都依靠Python来实现。

希普姆克

Hipmunk是一个在线消费者旅游网站,它比较热门旅游网站以找到最优惠的价格。这个Python网站的工具可让您找到目的地的最便宜的酒店和机票。

单击此处了解更多: 25个最受欢迎的python和django网站什么是在Django上运行的知名站点



12

是的,它可以。可以是带Python的Django或Ruby on Rails。它仍然会扩展。

有几种不同的技术。首先,缓存无法扩展。除了硬件平衡器之外,您可能还具有以nginx作为前端平衡的多个应用程序服务器。为了扩展数据库方面,如果您采用RDBMS方式,则可以在MySQL / PostgreSQL中使用读取从属进行相当大的扩展。

Django中的高流量网站的一些很好的例子可能是:

  • 当他们还在那儿的时候就穿衣服
  • 铁饼(通用共享评论管理器)
  • 所有与报纸相关的网站:《华盛顿邮报》等。

您可以放心。


2
只是说...死了的社交网络造成了糟糕的可扩展性示例:)
ZJR

3
我认为Pownce之死与可伸缩性问题无关。
凯达雷2011年

9

以下是Django中一些比较引人注目的内容的列表:

  1. 监护人的“ 调查议员的费用 ”应用程序

  2. Politifact.com(这是一篇有关(正面)体验的博客文章。该网站赢得了普利策奖)。

  3. 纽约时报的代表应用程序

  4. 每个块

  5. WaPo的一名程序员Peter Harkins 在他的博客中列出了他们用Django构建的所有内容

  6. 它有些旧,但是《洛杉矶时报》的某人对他们为什么选择Django 进行了基本概述

  7. 洋葱的AV俱乐部最近从(我认为Drupal)转移到了Django。

我想象这些网站中的许多网站每天的点击量可能超过10万次。Django当然可以每天点击10万次甚至更多。但是YMMV会根据您所构建的内容将您的特定网站放到那里。

在Django级别上,有一些缓存选项(例如,在memcached中缓存查询集和视图可以解决奇迹)以及其他方面(如Squid之类的上游缓存)。数据库服务器规范也将是一个因素(通常是挥霍的地方),以及您对其进行的优化程度。例如,不要以为Django会正确设置索引。不要以为默认的PostgreSQLMySQL配置是正确的配置。

此外,如果这是很慢的话,您总是可以选择让多个应用程序服务器运行Django,并在其前面安装软件或硬件负载平衡器。

最后,您是否要在与Django相同的服务器上提供静态内容?您使用的是Apache还是nginxlighttpd之类的东西?您能负担得起将CDN用于静态内容吗?这些都是要考虑的事情,但这都是非常投机的。每天10万次点击不是唯一的变量:您要花费多少?您拥有多少专业知识来管理所有这些组件?您需要花费多少时间将它们整合在一起?


9

YouTube的开发者拥护者在PyCon 2012上发表了有关缩放Python话题,这也与缩放Django有关。

YouTube拥有超过十亿的用户,并且YouTube基于Python构建。


3
但是youtube不是用Django构建的。Python可能很快,但对于Django却不是。
Joshua Partogi 2010年

4
是的,但问题是随着Django的发展,它为速度重构奠定了良好的基础,而且随着Google致力于Unladen Swallow等项目的发展,它会变得更好。
orokusaki 2010年

7

我已经使用Django一年多了,它对组合模块化,可扩展性和开发速度的管理方式印象深刻。像任何技术一样,它也带有学习曲线。但是,Django社区提供的出色文档使学习曲线的难度大大降低。Django能够很好地处理我提出的所有问题。看起来它将能够很好地扩展到未来。

BidRodeo Penny Auctions是一个中等规模的Django支持的网站。这是一个非常动态的网站,每天确实处理大量的网页浏览。


6

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

对于该数量,预计至少要有30台服务器……每台服务器仍然有1000个并发用户。


2
从播客看来,SO仅使用3台服务器。但是SO是使用C#而不是Python构建的,因此很糟糕。
S.Lott

1
显然,问题将是:它们有多少强大的服务器?
mamcx

6

今天在Django上构建的“最大”网站是什么?(我衡量大多是由用户流量的大小), Pinterest的
disqus.com
这里更多:https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-django-websites/

Django是否可以每天处理100,000个用户,每个用户访问几个小时?
是的,但是使用适当的体系结构,数据库设计,缓存,负载平衡以及多个服务器或节点

像Stack Overflow这样的网站可以在Django上运行吗?
是的,只需要按照第二个问题中提到的答案


5

另一个示例是rasp.yandex.ru,俄罗斯的运输时间表服务。出席人数可以满足您的要求。


5

如果您的网站上有一些静态内容,那么将Varnish服务器放在最前面将大大提高性能。即使是一个盒子,也可以轻松吐出100 Mbit / s的流量。

请注意,对于动态内容,使用Varnish之类的东西会变得更加棘手。


1
这里的问题是清漆会极大地提高所有性能。更快的框架仍然会更快。
ZJR

5

我对Django的经验很少,但我确实记得《 Django书》中有一章,他们采访了运行某些较大Django应用程序的人员。 这是一个链接。 我想它可以提供一些见解。

它说curse.com是最大的Django应用程序之一,每月浏览量约为60-9000万。


1
curse.com网址现在以.aspx结尾(如果他们手工制作,则不知道)
ZJR 2010年

5

我使用Django为爱尔兰的国家广播公司开发高流量站点。它对我们很好。开发高性能站点不仅仅只是选择一个框架。框架将只是与最薄弱的环节一样强大的系统的一部分。如果问题是数据库查询速度慢或服务器或网络配置错误,则使用最新的框架“ X”不能解决您的性能问题。


4

尽管这里有很多不错的答案,但我只是想指出一点,没有人强调。

取决于应用

如果您的应用程序写时很少,那么从DB中读取的数据要比编写的要多得多。然后缩放django应该是相当琐碎的,哎呀,它带有一些相当不错的输出/视图缓存,可以直接使用。充分利用这一点,例如说redis作为缓存提供者,在它前面放置一个负载均衡器,启动n个实例,您应该能够处理非常大的流量。

现在,如果您必须每秒进行数千次复杂的写操作?不同的故事。Django将是一个错误的选择吗?好吧,不一定要取决于您如何真正设计解决方案以及您的要求是什么。

只是我的两分钱:-)




3

问题不在于django是否可以扩展。

正确的方法是了解并了解在django / symfony / rails项目下可以很好地扩展的网络设计模式和工具。

一些想法可以是:

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

希望对您有所帮助。这是我到山上的小石头。


3

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

  • Python非常好,但是它是一种解释型语言,因此速度很慢。但是有许多加速器和缓存服务可以部分解决此问题。

  • 如果您正在考虑快速发展,那么Ruby on Rails是最好的选择。此(ROR)框架的主要座右铭是为开发人员提供舒适的体验。如果您比较一下,Ruby和Python的语法几乎相同。

  • Google App Engine是一项非常好的服务,但是它将在您的范围内束缚您,您没有机会尝试新事物。取而代之的是,您可以使用Digital Ocean云,因为它最简单的液滴仅需每月支付5美元Heroku是另一项免费服务,您可以在其中部署产品。

  • 是! 是! 您所听到的是完全正确的,但这是一些使用其他技术的示例

    • Rails:Github,Twitter(以前),Shopify,Airbnb,Slideshare,Heroku等
    • PHP:Facebook,Wikipedia,Flickr,Yahoo,Tumbler,Mailchimp等。

结论是一种框架或语言无法为您做任何事情。更好的架构,设计和策略将为您提供可扩展的网站。Instagram是最大的例子,这个小团队正在管理如此庞大的数据。这是一个有关其架构必须阅读的博客


Django的发展可能很快。Django是完美主义者的有期限的Web框架。

3

我不认为问题确实与Django缩放有关。

我真的建议您研究一下可以帮助您满足扩展需求的体系结构,如果您出错了,那么Django的性能将毫无意义。性能!=规模。您可以拥有一个性能惊人但不能扩展的系统,反之亦然。

您的应用程序数据库绑定了吗?如果是这样,那么您的规模问题也就在那里。您如何计划与Django中的数据库进行交互?当您的数据库无法以Django接受请求的速度处理请求时,会发生什么情况?当数据超过一台物理计算机时,会发生什么。您需要考虑如何计划应对这些情况。

此外,当您的流量超过一台应用服务器时会发生什么?在这种情况下,如何处理会话可能会很棘手,通常您可能需要无共享架构。同样,这取决于您的应用程序。

简而言之,语言不是决定规模的因素,语言是决定性能的因素(再次取决于您的应用程序,不同的语言表现不同)。是您的设计和体系结构使扩展成为现实。

希望对您有所帮助,如果您有任何疑问,将很乐意为您提供进一步的帮助。


2

一旦您的站点/应用程序开始增长,就必须平均分配任务,简而言之,优化各个方面,包括数据库,文件,图像,CSS等,并平衡负载与其他多种资源。或者,您为其腾出更多空间。大型站点必须实施CDN,云等最新技术。仅仅开发和调整应用程序并不能使您满意,其他组件也起着重要的作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.