Django会扩展吗? [关闭]

问题描述 投票:1042回答:29

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

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

现在我正在考虑发表我的作品,我开始关注规模。我发现关于Django扩展功能的唯一信息是由Django团队提供的(我没有说什么可以忽略它们,但这显然不是客观信息......)。

我的问题:

  • 今天建立在Django上的“最大”网站是什么? (我主要通过用户流量测量大小)
  • Django可以每天处理100,000个用户,每个用户访问该网站几个小时吗?
  • 像Stack Overflow这样的网站可以在Django上运行吗?
python django web-applications scalability
29个回答
875
投票
  1. “今天在Django上建立的最大的网站是什么?” 没有任何一个地方可以收集有关Django建站点上的流量的信息,因此我将不得不使用来自不同位置的数据进行搜索。首先,我们在the main Django project page的首页上列出了Django站点,然后在djangosites.org上列出了Django站点。通过列表并选择一些我知道的流量,我们看到: InstagramWhat Powers Instagram: Hundreds of Instances, Dozens of TechnologiesPinterestAlexa rank 37 (21.4.2015)和2013年的7000万用户 Bitbucket200TB of Code and 2.500.000 Users DisqusServing 400 million people with Pythoncurse.com600k daily visitstabblo.com44k daily visits,见Ned Batchelder的帖子Infrastructure for modern web siteschesspark.comAlexa排名约179k。 pownce.com(不再活跃):alexa排名约65,000。 Pownce的Mike Malone在他关于Scaling Django Web Apps的EuroDjangoCon演讲中说“每秒数百次点击”。这是关于如何扩展Django的非常好的演示,并且在Django可伸缩性方面提出了一些好处,包括(当前)缺点。 惠普有一个用Django 1.5构建的网站:ePrint center。但是,至于novemer / 2015,整个网站都已迁移,此链接只是一个重定向。该网站是一项全球服务,参与订购Instant Ink和HP提供的相关服务(*)。
  2. “Django每天可以处理100,000个用户,每个用户访问该网站几个小时吗?” 是的,见上文。
  3. “Stack Overflow这样的网站可以在Django上运行吗?” 我的直觉是肯定的,但正如其他人的回答和Mike Malone在他的演讲中提到的那样,数据库设计至关重要。如果我们能找到任何可靠的流量统计数据,也可以在www.cnprog.com上找到强有力的证据。无论如何,它不只是通过抛出一堆Django模型而发生的事情:)

当然,有更多的网站和博主感兴趣,但我必须停在某个地方!


关于Using Django to build high-traffic site michaelmoore.com的博客帖子被描述为top 10,000 websiteQuantcast statscompete.com stats


(*)编辑的作者,包括这样的参考,曾经在该项目中担任外包开发人员。


17
投票

正如高性能Django Book所述,并通过这个Cal Henderson

查看下面提到的更多细节:

听到人们说“Django不能扩展”并不罕见。根据您的观察方式,该陈述完全正确或明显错误。 Django本身并没有扩展。

Ruby on Rails,Flask,PHP或数据库驱动的动态网站使用的任何其他语言也是如此。

然而,好消息是Django与一套缓存和负载平衡工具进行了精美的交互,这些工具可以扩展到可以投入的流量。

与您在线阅读的内容相反,它可以在不更换通常标记为“太慢”的核心组件(如数据库ORM或模板层)的情况下完成此操作。

Disqus每月提供超过80亿的页面浏览量。这些是一些巨大的数字。

这些团队已经证明Django肯定会扩展。我们在林肯环路的经验支持它。

我们已经建立了大型Django网站,可以在Reddit主页上度过一天,而不会出汗。

Django的扩展成功故事几乎无法在此列出。

它支持Disqus,Instagram和Pinterest。想要更多证明吗? Instagram能够在Django上维持超过3000万用户,只有3名工程师(其中2名没有后端开发


16
投票

今天,我们根据需要使用许多网络应用和网站。其中大多数非常有用。我将向您展示python或django使用的一些内容。

Washington Post

华盛顿邮报的网站是一个非常受欢迎的在线新闻来源,可以附上他们的日报。它的大量视图和流量可以通过Django Web框架轻松处理。 Washington Post - 52.2 million unique visitors (March, 2015)

NASA

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

The Guardian

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

YouTube

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

DropBox

DropBox启动了存储革命的在线文档,该革命已成为日常生活的一部分。我们现在几乎将所有内容存储在云中。 Dropbox允许我们使用Python的强大功能存储,同步和共享几乎任何东西。

Survey Monkey

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

Quora

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

Bitly

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

Reddit

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

Hipmunk

Hipmunk是一个在线消费者旅游网站,比较热门旅游网站,为您找到最优惠的价格。这个Python网站的工具允许您找到最便宜的酒店和航班。

点击这里了解更多:25-of-the-most-popular-python-and-django-websitesWhat-are-some-well-known-sites-running-on-Django


15
投票

我想我们不妨将2011年的Apple应用程序Instagram添加到使用django密集的列表中。


12
投票

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

几种不同的技术。首先,缓存不是缩放。除了硬件平衡器之外,您还可以将多个应用程序服务器与nginx作为前端进行平衡。要在数据库端扩展,如果你采用RDBMS方式,你可以在MySQL / PostgreSQL中使用read slave。

Django中交通繁忙的网站的一些很好的例子可能是:

  • Pownce,当他们还在那里。
  • Discus(通用共享评论经理)
  • 所有报纸相关网站:华盛顿邮报等。

你可以感到安全。


9
投票

以下是Django中构建的一些相对高调的内容列表:

  1. 卫报的“Investigate your MP's expenses”应用程序
  2. Politifact.com(这是一个Blog post谈论(积极的)经验。网站赢得普利策奖。
  3. 纽约时报的Represent应用程序
  4. EveryBlock
  5. Peter Harkins,WaPo的程序员之一,lists all the stuff they’ve built with Django在他的博客上
  6. 它有点老了,但有人来自洛杉矶时报gave a basic overview,为什么他们和Django一起去。
  7. 洋葱的AV俱乐部最近从(我认为Drupal)转移到了Django。

我想这些网站中的一些可能每天都会超过10万次点击。 Django当然可以达到每天100k次点击次数。但YMMV根据您正在建设的内容获取您的特定网站。

Django级别有缓存选项(例如缓存查询集和memcached中的视图可以创建奇迹)以及(像Squid这样的上游缓存)。数据库服务器规范也是一个因素(通常是挥霍的地方),以及你调整它的程度。例如,不要假设Django正在正确设置索引。不要假设默认的PostgreSQLMySQL配置是正确的。

此外,如果这是慢点,您可以选择让多个应用程序服务器运行Django,前面有软件或硬件负载平衡器。

最后,您是否在与Django相同的服务器上提供静态内容?您使用的是Apache还是nginxlighttpd?你能负担得起使用CDN静态内容吗?这些都是需要考虑的事情,但这些都是非常具有推测性的。每天100k次点击不是唯一的变量:您想花多少钱?您管理所有这些组件有多少专业知识?你有多少时间把它们拉到一起?


8
投票

YouTube的开发者倡导者提供了talk about scaling Python at PyCon 2012,这也与缩放Django有关。

YouTube不仅仅是billion users,YouTube也是基于Python构建的。


7
投票

我已经使用Django超过一年了,对于如何将模块化,可扩展性和开发速度结合起来给我留下了非常深刻的印象。与任何技术一样,它带有学习曲线。然而,Django社区的优秀文档使这种学习曲线变得更加陡峭。 Django能够很好地处理我所做的一切。看起来它能够很好地适应未来。

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


6
投票

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

对于该卷,预计至少有30台服务器......每台服务器仍然是一个相当重的1,000个并发用户。


5
投票

另一个例子是rasp.yandex.ru,俄罗斯运输时刻表服务。它的出勤率满足您的要求。


5
投票

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

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


258
投票

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

我们正在使用Apache前端Django和MySQL。操作系统是红帽企业Linux(RHEL)。 64位。我们在Django的守护进程模式下使用mod_wsgi。除了接受默认值之外,我们没有进行缓存或数据库优化。

我们都在64位戴尔的一个虚拟机中(我认为)32Gb RAM。

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

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


5
投票

我对Django的体验很小但我记得在Django Book中他们有一章他们采访了一些运行一些较大的Django应用程序的人。 Here is a link.我想它可以提供一些见解。

它说curse.com是最大的Django应用程序之一,一个月内页面浏览量约为600-9000万。


5
投票

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


5
投票

今天建立在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上运行吗? 是的,只需要按照第二个问题中提到的答案


4
投票

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

这取决于应用程序

如果您的应用程序在写入时很轻松,就像您从DB中读取的数据要多于您编写的数据。然后缩放django应该是相当微不足道的,哎呀,它带有一些相当不错的输出/视图缓存,开箱即用。利用它,并说,redis作为缓存提供者,在它前面放置一个负载均衡器,启动n实例,你应该能够处理非常大量的流量。

现在,如果你必须每秒进行数千次复杂的写入操作?不同的故事。 Django会是一个糟糕的选择吗?嗯,不一定,取决于您如何构建您的解决方案,以及您的要求是什么。

只是我的两分钱:-)


3
投票

你绝对可以在Django运行一个高流量的网站。看看这个前Django 1.0但仍然相关的帖子:http://menendez.com/blog/launching-high-performance-django-site/


3
投票

看看这个名为EveryBlock的微型新闻聚合器。

它完全用Django编写。事实上,他们是开发Django框架的人。


3
投票

问题是不知道django是否可以扩展。

正确的方法是了解并了解哪些是django / symfony / rails项目下的网络设计模式和工具,以便进行扩展。

一些想法可以是:

  • 复用。
  • 反向代理。例如:Nginx,Varnish
  • Memcache Session。例如:Redis
  • 在项目和数据库上进行群集以实现负载平衡和容错:例如:Docker
  • 使用第三方存储资产。例如:亚马逊S3

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


3
投票

我认为问题不在于Django扩展。

我真的建议你研究一下你的架构是什么,这将有助于你扩展需求。如果你弄错了,那就没有关于Django表现如何的重点。表现!=规模。您可以拥有一个具有惊人性能但不能扩展的系统,反之亦然。

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

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

简而言之,语言不是决定规模的因素,语言负责绩效(同样取决于您的应用程序,不同的语言表现不同)。正是您的设计和架构使扩展成为现实。

我希望它有所帮助,如果您有任何疑问,我们将很乐意为您提供帮助。


3
投票

如果您想使用开源,那么有很多选项供您使用。但是python是最好的,它有很多库和超级棒的社区。这些原因可能会改变你的想法:

  • Python非常好,但它是一种解释性语言,使它变慢。但是许多加速器和缓存服务都可以解决这个问题。
  • 如果您正在考虑快速开发,那么Ruby on Rails是最好的。这个(ROR)框架的主要座右铭是为开发人员提供舒适的体验。如果你比较Ruby和Python都有几乎相同的语法。
  • 谷歌应用程序引擎是一个非常好的服务,但它会绑定你的范围,你没有机会尝试新的东西。而不是它你可以使用Digital Ocean云,其最简单的液滴只需要5美元/月的费用。 Heroku是另一项免费服务,您可以在其中部署您的产品。
  • 是!是!你听到的是完全正确的,但这里有一些使用其他技术的例子 Rails:Github,Twitter(之前),Shopify,Airbnb,Slideshare,Heroku等。 PHP:Facebook,维基百科,Flickr,雅虎,不倒翁,Mailchimp等

结论是一个框架或语言不会为你做所有事情。更好的架构,设计和策略将为您提供可扩展的网站。 Instagram是最好的例子,这个小团队正在管理如此庞大的数据。这里有一个关于它的架构的blog必须阅读它。


2
投票

一旦您的站点/应用程序开始增长,就必须均匀地分散任务,简而言之,优化每个方面,包括DB,文件,图像,CSS等,并平衡负载与其他几个资源。或者你为它的成长腾出一些空间。必须在大型网站上实施CDN,Cloud等最新技术。只是开发和调整应用程序不会给你百分之百的满足感,其他组件也起着重要的作用。


172
投票

不确定每日访问次数,但这里有一些大型Django网站的例子:

这是high traffic Django sites on Quora列表的链接。


102
投票

今天建立在Django上的“最大”网站是什么? (我主要通过用户流量测量大小)

在美国,它是Mahalo。我被告知他们每月处理大约1000万个唯一身份证。现在,在2019年,Mahalo由Ruby on Rails提供支持。

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

其他着名的Django用户包括PBS,国家地理,发现,NASA(实际上是NASA内部的许多不同部门)和国会图书馆。

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

是的 - 但是只有你已经正确编写了应用程序,并且你有足够的硬件。 Django不是一个神奇的子弹。

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

是(但见上文)。

技术方面,轻松:查看soclone一次尝试。交通方面,竞争钉桩StackOverflow每月不到100万独立。我可以说至少有十几个Django网站的流量超过SO。


85
投票

扩展Web应用程序与Web框架或语言无关,与您的体系结构有关。这是关于如何处理浏览器缓存,数据库缓存,如何使用非标准持久性提供程序(如CouchDB),如何调整数据库和许多其他东西...


78
投票

玩魔鬼的拥护者一点点:

你应该查看由DjangoCon 2008 Keynote发布的Cal Henderson,标题为“为什么我讨厌Django”,他几乎完成了Django遗漏的一切,你可能想在一个高流量的网站上做。在一天结束时,你必须以开放的心态对待这一切,因为完全可以编写可扩展的Django应用程序,但我认为这是一个很好的演示文稿并且与您的问题相关。


51
投票

我所知道的最大的django站点是Washington Post,这肯定表明它可以很好地扩展。

良好的设计决策可能比其他任何事情都有更大的性能影响。 Twitter经常被引用作为一个网站,它体现了另一个基于动态解释语言的Web框架Ruby on Rails的性能问题 - 但Twitter工程师已经声明该框架并不像他们早期做出的一些数据库设计选择那么多问题上。

Django与memcached非常合作,并提供了一些用于管理缓存的类,您可以在这里解决大多数性能问题。实际上,您在线上传输的内容几乎比后端更重要 - 使用像yslow这样的工具对于高性能Web应用程序至关重要。您可以随时在后端投入更多硬件,但无法更改用户带宽。


31
投票

另一周我参加了EuroDjangoCon会议,这是几次会谈的主题 - 包括最大的基于Django的网站Pownce的创始人(来自一次谈话here的幻灯片)。主要的信息是,你不必担心Django,而是适当的缓存,负载平衡,数据库优化等。

Django实际上已经为大多数事情提供了钩子 - 特别是缓存变得非常容易。


24
投票

我相信你正在寻找一个更加可靠的答案,但我能想到的最明显的客观验证是谷歌推动Django与其App Engine框架一起使用。如果有人知道并定期处理可扩展性,那就是谷歌。从我所读到的,最受限制因素似乎是数据库后端,这就是谷歌使用自己的...

© www.soinside.com 2019 - 2024. All rights reserved.