关于Python:Django扩展

Does Django scale?

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

  • 我想使用免费/开源工具。
  • 我喜欢Python,觉得它是一种长期的语言,但是对于Ruby,我不确定,而且PHP似乎是一个巨大的学习障碍。
  • 我正在为一个想法建立一个原型,并没有太多考虑未来。开发速度是主要因素,我已经了解了Python。
  • 我知道如果我将来选择这样做,迁移到谷歌应用引擎会更容易。
  • 我听说姜戈"不错"。

现在我越来越想出版我的作品了,我开始担心规模。我找到的关于Django扩展能力的唯一信息是由Django团队提供的(我没有说什么可以忽略它们,但这显然不是客观信息…)。

我的问题:

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


  • "今天在Django建的最大的网站是什么?"

    没有任何一个地方可以收集Django建造的站点上的流量信息,所以我必须使用来自不同位置的数据来尝试一下。首先,我们在Django项目主页的首页上有一个Django站点列表,然后在Djangosites.org上有一个Django构建站点列表。浏览列表并挑选一些我知道有不错流量的,我们可以看到:

    • Instagram:Instagram的动力:数百个实例,数十种技术。

    • Pinterest:Alexa在2013年排名37(214.2015)和7000万用户

    • 位桶:200TB的代码和250万用户

    • 迪斯科斯:用Python服务4亿人。

    • 诅咒网站:每天访问60万次。

    • tabblo.com:44K每日访问量,见内德·巴切尔德的现代网站帖子基础设施。

    • Chesspark.com:Alexa排名约179K。

    • pownce.com(不再活跃):Alexa的排名约为65K。Pownce的MikeMalone在他关于扩展django网络应用程序的Eurodjangocon演讲中说,"每秒点击数百次"。这是一个关于如何扩展django的非常好的演示,并指出了一些优点,包括django可扩展性中的(当前的)缺点。

    • 惠普有一个用django 1.5:eprint中心建造的网站。然而,对于Novemer/2015,整个网站都被迁移了,而这个链接只是一个重定向。此网站是一项全球性的服务,可订阅惠普提供的即时墨水和相关服务(*)。

  • "Django每天能处理100000个用户,每个用户访问网站几个小时吗?"

    是的,见上面。

  • "像堆栈溢出这样的站点能在Django上运行吗?"

    我的直觉是肯定的,但正如其他人所回答的,迈克·马龙在他的演讲中提到的,数据库设计是至关重要的。如果我们能找到任何可靠的流量统计数据,也可以在www.cnprog.com上找到有力的证据。不管怎样,这不仅仅是一些将要发生的事情,把一堆德姜模特放在一起。

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

    关于使用django建立高流量网站michaelmoore.com的博客文章被描述为一个10000强网站。quantcast stats和compete.com stats。

    (*)编辑的作者,包括此类参考,用于在该项目中作为外包开发人员工作。


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

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

    我们都在64位戴尔(我想)32GB内存的一台虚拟机上。

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

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


    不确定每天访问的次数,但这里有几个大型Django网站的例子:

    • disqus.com(来自Djangocon的谈话)
    • bitback.org(写)
    • lanyrd.com(来源)
    • support.mozilla.com(源代码)
    • addons.mozilla.org(源代码)(Djangocon提供)
    • theonion.com(撰写)
    • guardian.co.uk评论系统使用django(来源)
    • Instagram
    • Pinterest
    • RDIO

    以下是Quora上高流量Django站点列表的链接。


    What's the"largest" site that's built on Django today? (I measure size mostly by user traffic)

    在美国,是马哈洛。我听说他们一个月要处理大约1000万个Uniques。现在,在2019年,Mahalo由RubyonRails提供动力。

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

    其他著名的django用户包括PBS、国家地理、探索、NASA(实际上是NASA内部的一些不同部门)和国会图书馆。

    Can Django deal with 100k users daily, each visiting the site for a couple of hours?

    是的——但前提是你的应用程序写的正确,并且你有足够的硬件。Django不是一颗神奇的子弹。

    Could a site like StackOverflow run on Django?

    是(但见上文)。

    技术上明智,容易:一次尝试见索克龙。在交通方面,竞品标桩堆积如山,每月不到100万个。我能说出至少十几个交通流量比这更多的Django网站。


    稍微扮演魔鬼代言人:

    你应该看一下由Cal Henderson发表的题为"为什么我讨厌Django"的2008年Djangocon主题演讲,他几乎把你可能想在高流量网站上做的Django丢失的所有事情都翻了一遍。在一天结束的时候,你必须以一个开放的心态来接受这一切,因为它是完全有可能写的姜戈应用程序的规模,但我认为这是一个很好的演示和相关的问题。


    扩展Web应用程序不是关于Web框架或语言,而是关于您的体系结构。这是关于如何处理浏览器缓存、数据库缓存、如何使用非标准持久性提供程序(如CouchDB)、数据库的调优方式以及其他许多东西……


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

    好的设计决策可能比其他任何决策都具有更大的性能影响。Twitter经常被引用为一个网站,它体现了另一个基于动态解释语言的Web框架Ruby on Rails的性能问题。然而,Twitter工程师表示,该框架并不像他们早期所做的一些数据库设计选择那么重要。

    Django与memcached非常协作,并提供了一些用于管理缓存的类,在这些类中,您可以解决大部分性能问题。在现实中,在线交付的内容几乎比后端更重要——使用像yslow这样的工具对于高性能Web应用程序来说至关重要。您可以在后端添加更多的硬件,但不能更改用户带宽。


    前几周,我参加了Eurodjangocon会议,这是两次会谈的主题,包括来自最大的django网站Pownce的创始人(这里是一次会谈的幻灯片)。主要的信息是,您不必担心Django,而是适当的缓存、负载平衡、数据库优化等。

    Django实际上有很多这样的钩子——特别是缓存,非常容易实现。


    我相信你正在寻找一个更可靠的答案,但我能想到的最明显的客观验证是,谷歌将django推到其应用引擎框架上。如果有人知道并定期处理可伸缩性,那就是谷歌。据我所读,最大的限制因素似乎是数据库后端,这就是为什么谷歌使用他们自己的…


    如高性能DJANGO手册所述通过这个Cal Henderson

    详情如下:

    人们常说"姜戈不成比例"。根据你对它的看法,这个陈述要么是完全正确的,要么显然是错误的。Django本身不具有规模。

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

    然而,好消息是,Django与一套缓存和负载平衡工具允许它扩展到尽可能多的流量。

    与你在网上看到的相反,它可以这样做,而无需替换通常标记为"太慢"的核心组件,如数据库ORM或模板层。

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

    这些团队已经证明了Django的规模。我们在林肯环路的经历证明了这一点。

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

    在这一点上,Django的规模化成功案例几乎太多了,无法列出。

    它支持disqus、instagram和pinterest。想要更多的证据吗?Instagram能够在Django上支持超过3000万用户,只有3名工程师(其中2名没有后端开发)


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

    华盛顿邮报

    《华盛顿邮报》的网站是一个非常受欢迎的在线新闻来源,伴随着他们的日报。它的大量视图和流量可以很容易地由DjangoWeb框架处理。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的强大功能存储、同步和共享几乎所有内容。

    测量猴

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

    夸拉

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

    叮当地

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

    雷迪特

    Reddit被称为互联网的首页。它是一个在线的地方,可以根据数千种不同的类别来查找信息或娱乐。文章和链接由用户生成,并通过投票提升到最高层。Reddit的许多功能都依赖于Python。

    希穆克

    Hipmunk是一个在线消费者旅游网站,它比较顶级旅游网站,为您找到最划算的价格。这个python网站的工具可以让你找到最便宜的酒店和航班。

    单击此处了解更多信息:25个最流行的python和django网站,Django上有什么有名的网站


    我想我们还是把苹果2011年的年度应用Instagram添加到使用django的列表中吧。


    是的,可以。它可以是带有python或ruby-on-rails的django。它仍然会缩放。

    有几种不同的技术。首先,缓存没有伸缩性。除了硬件平衡器之外,还可以有几个应用服务器与nginx作为前端进行平衡。要在数据库方面进行扩展,如果采用RDBMS的方式,那么在mysql/postgresql中可以使用read slave进行相当大的扩展。

    在Django,一些流量大的网站可以是:

    • 他们还在的时候。
    • Discus(通用共享评论管理器)
    • 所有与报纸相关的网站:华盛顿邮报和其他。

    你可以感到安全。


    以下是在Django建造的一些比较引人注目的东西的列表:

  • 卫报的"调查你议员的开支"应用程序

  • politifact.com(这是一篇关于(积极)体验的博客文章。该网站赢得了普利策奖。

  • 纽约时报的代表应用程序

  • 每个块

  • Wapo的一位程序员PeterHarkins在他的博客上列出了他们和Django一起建立的所有东西。

  • 有点老了,但是洛杉矶时报的人对他们为什么和姜戈一起去做了一个基本的概述。

  • 洋葱的AV俱乐部最近从(我认为是Drupal)搬到了Django。

  • 我想这些网站中的一些可能每天的点击量超过10万次。Django当然可以每天点击10万次甚至更多。但是YMMV会根据你所建的建筑把你的特定地点建在那里。

    在django级别有缓存选项(例如,在memcached中缓存查询集和视图可以产生奇迹)以及更高级别(上游缓存如squid)。数据库服务器规范也是一个因素(通常是挥霍的地方),您对它的调优程度也是一个因素。例如,不要假设Django将正确设置索引。不要假设默认的PostgreSQL或MySQL配置是正确的。

    此外,如果速度较慢,您可以选择让多个应用程序服务器运行Django,并在前面安装软件或硬件负载平衡器。

    最后,您是否在与Django相同的服务器上提供静态内容?您使用的是Apache还是nginx或lighttpd?您能负担得起将cdn用于静态内容吗?这些都是需要考虑的事情,但都是很投机的。每天10万次点击量并不是唯一的变量:你想花多少钱?您有多少专业知识来管理所有这些组件?你要花多少时间才能把它们拼在一起?


    YouTube的开发倡导者在2012年的pycon大会上讨论了如何缩放python,这也与缩放django有关。

    YouTube拥有超过10亿的用户,而YouTube是建立在Python之上的。


    我已经使用Django一年多了,我对它如何将模块性、可扩展性和开发速度结合在一起印象深刻。就像任何技术一样,它也有学习曲线。然而,Django社区的优秀文档使这条学习曲线变得不那么陡峭。Django已经能够很好地处理我抛给它的所有事情。它看起来可以很好地扩展到未来。

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


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

    对于该卷,至少需要30个服务器…每台服务器上仍然有1000个并发用户。


    今天在Django建的"最大"网站是什么?(我主要通过用户流量测量大小)PinterestDISQUS更多信息请访问:https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-django-websites/

    Django每天能处理100000个用户,每个用户访问网站几个小时吗?是的,但是使用适当的体系结构、数据库设计、缓存的使用、负载平衡和多个服务器/节点

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


    我在Django的经验很少,但我确实记得在Django的书中,他们有一章采访运行一些更大的Django应用程序的人。这里有一个链接。我想这能提供一些见解。

    它说Curse.com是最大的django应用程序之一,一个月内有大约6000-9000万页面浏览量。


    如果您有一个静态内容的站点,那么在前面放置一个Varnish服务器将显著提高您的性能。即使是一个盒子也可以很容易地输出100兆比特/秒的流量。

    注意,对于动态内容,使用类似于清漆的东西会变得更加困难。


    另一个例子是Rasp.yandex.ru,俄罗斯运输时间表服务。它的出席符合您的要求。


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


    尽管这里有很多很好的答案,但我想指出的是,没有人强调……

    这取决于应用程序

    如果你的应用程序写得很轻,比如你从数据库读取的数据比你写的要多得多。然后,缩放django应该是相当简单的,见鬼,它附带了一些相当不错的直接输出/视图缓存。利用它,比如说,Redis作为缓存提供者,在它前面放置一个负载均衡器,旋转n个实例,您应该能够处理大量的流量。

    现在,如果你必须在一秒钟内完成数千个复杂的写作?不同的故事。Django会是一个糟糕的选择吗?嗯,不一定,这取决于您如何真正地构建解决方案,以及您的需求是什么。

    只有我的两分钱:—)


    你绝对可以在Django经营一个高流量的网站。查看这篇django 1.0之前的文章,但仍然相关:http://menendez.com/blog/launching-high-performance-django-site/


    看看这个叫做EveryBlock的微新闻聚合器。

    它完全是用姜戈语写的。事实上,他们是Django框架本身的开发人员。


    我不认为这个问题真的是关于姜戈缩放。

    我真的建议你研究一下你的架构,这将有助于你扩展需求。如果你弄错了,那就没有必要再讨论姜戈的表现了。表演!=比例尺。您可以拥有一个性能惊人但无法扩展的系统,反之亦然。

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

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

    在短语言中,不是决定规模的因素,而是一种语言负责性能(同样,取决于您的应用程序,不同的语言执行的不同)。正是您的设计和体系结构使扩展成为现实。

    希望有帮助,如果您有问题的话,我很乐意为您提供进一步的帮助。


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

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

    • 如果您考虑快速开发,那么RubyonRails是其中最好的。这个(ror)框架的主要格言是为开发人员提供舒适的体验。如果比较ruby和python,它们的语法几乎相同。

    • 谷歌应用引擎是非常好的服务,但它会把你束缚在它的范围内,你没有机会尝试新事物。代替它,你可以使用数字海洋云,它的最简单的水滴只需要5美元/月的费用。Heroku是另一个免费服务,您可以在这里部署您的产品。

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

      • Rails:Github、Twitter(以前)、Shopify、Airbnb、Slideshare、Heroku等。
      • php:facebook、wikipedia、flickr、yahoo、bumbler、mailchimp等。

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


    在站点/应用程序开始增长后,需要均匀地分布任务,简而言之,优化每个方面(包括DBS、文件、图像、CSS等),并与其他几个资源平衡负载。或者你为它腾出更多的成长空间。像cdn、云等最新技术的实现必须有庞大的站点。仅仅开发和调整一个应用程序并不能让你百分之满意,其他组件也起着重要的作用。


    问题是不知道Django是否可以缩放。

    正确的方法是理解和知道哪些是网络设计模式和工具,可以放在Django/symfony/rails项目下进行扩展。

    一些想法可以是:

    • 多路复用。
    • 反向代理。例如:nginx,清漆
    • memcache会话。雷迪斯
    • 将您的项目和用于负载平衡和容错的数据库合并在一起:例如:Docker
    • 使用第三方存储资产。Amazon S3

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