Django会扩展吗?

时间:2009-05-20 05:07:56

标签: python django web-applications scalability

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

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

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

我的问题:

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

29 个答案:

答案 0 :(得分:848)

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

    没有任何一个地方可以收集有关Django构建网站上的流量的信息,因此我将不得不使用来自不同位置的数据进行搜索。首先,我们在the main Django project page的首页上有一个Django站点列表,然后是djangosites.org的Django站点列表。通过列表并选择一些我知道的具有良好流量的我们看到:

  2. “Django每天可以与100,000名用户打交道,每次访问该网站几个小时?”

    是的,见上文。

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

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

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


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


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

答案 1 :(得分:253)

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

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

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

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

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

答案 2 :(得分:169)

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

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

答案 3 :(得分:99)

  

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

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

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

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

  

Django可以每天与100k用户打交道,每次访问该网站几个小时吗?

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

  

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

是(但见上文)。

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

答案 4 :(得分:81)

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

答案 5 :(得分:78)

稍微扮演魔鬼的拥护者:

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

答案 6 :(得分:51)

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

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

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

答案 7 :(得分:31)

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

Django实际上有大部分内容的钩子 - 特别是缓存很容易。

答案 8 :(得分:24)

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

答案 9 :(得分:17)

今天,我们根据自己的需求使用了许多网络应用和网站。其中大多数非常有用。我将向您展示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

答案 10 :(得分:17)

正如高绩效Django Book中所述  并完成此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万用户

答案 11 :(得分:15)

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

答案 12 :(得分:11)

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

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

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

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

你可以感到安全。

答案 13 :(得分: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。

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

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

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

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

答案 14 :(得分:8)

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

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

答案 15 :(得分:7)

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

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

答案 16 :(得分:6)

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

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

答案 17 :(得分: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上运行吗?
是的,只需要按照第二个问题中提到的答案进行操作

答案 18 :(得分:5)

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

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

答案 19 :(得分:5)

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

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

答案 20 :(得分:5)

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

答案 21 :(得分:4)

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

答案 22 :(得分:4)

即使 - 虽然这里有很多很棒的答案,但我只想指出,没有人强调过......

取决于应用程序

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

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

只是我的两分钱: - )

答案 23 :(得分:3)

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

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

答案 24 :(得分:3)

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

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

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

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

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

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

答案 25 :(得分:3)

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

  • Python非常好,但它是一种解释性语言,使其变慢。但是许多加速器和缓存服务都可以解决这个问题。

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

  • Google App Engine是一项非常好的服务,但它会在你的范围内绑定你,你没有机会尝试新事物。取而代之的是,您可以使用Digital Ocean云,其最简单的Droplet只需 $ 5 / Month 费用。 Heroku是您可以部署产品的另一项免费服务。

  • 是的!是!你听到的是完全正确的,但这里有一些使用其他技术的例子

    • Rails:Github,Twitter(之前),Shopify,Airbnb,Slideshare,Heroku等。
    • PHP:Facebook,维基百科,Flickr,Yahoo,Tumbler,Mailchimp等。

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

答案 26 :(得分:3)

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

答案 27 :(得分:2)

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

答案 28 :(得分:2)

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

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

一些想法可以是:

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

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