Django是否缩放?
我正在用Django构build一个Web应用程序。 我selectDjango的原因是:
- 我想要使用免费/开源工具。
- 我喜欢Python,觉得这是一个“长期”的语言,而关于Ruby,我不确定,PHP似乎是一个巨大的麻烦学习。
- 我正在build立一个想法的原型,并没有太多的考虑未来。 开发速度是主要的因素,我已经知道Python。
- 我知道,如果将来我select这样做,迁移到Google App Engine将会变得更加轻松。
- 我听说Django“很好”。
现在我越来越考虑出版我的作品,我开始关注规模。 我发现的关于Django扩展能力的唯一信息是由Django团队提供的(我没有说任何事情去漠视它们,但这显然不是客观的信息)。
我的问题:
- 什么是今天在Django上build立的“最大”的网站? (我主要测量用户stream量的大小)
- Django能够每天处理100,000个用户,每个用户访问这个站点几个小时?
- 像Stack Overflow这样的站点能在Django上运行吗?
-
“今天在Django上build立的最大的网站是什么?”
没有任何一个地方可以收集有关Django网站stream量的信息,所以我不得不使用来自不同地点的数据进行刺探。 首先,我们在主Django项目页面的首页上列出了Django站点列表,然后在djangosites.org上列出了Django构build的站点列表。 通过列表,并select一些我知道的stream量,我们看到:
-
Instagram : 什么能力Instagram:数百个实例,数十种技术 。
-
Pinterest : Alexa排名第37(21.4.2015) ,2013年用户达到7000万
-
Bitbucket : 200TB的代码和2.500.000用户
-
Disqus : 为Python服务4亿人 。
-
curse.com : 每日访问量为 60万 。
-
tabblo.com : 每日访问量为44k ,请参阅Ned Batchelder的post基础设施为现代网站 。
-
chesspark.com:Alexa排名约为179k。
-
pownce.com (不再有效): alexa排名约65k。 Pownce的Mike Malone在其关于Scaling Django Web Apps的 EuroDjangoCon演讲中表示“每秒点击数百次”。 这是一个关于如何扩展Django的非常好的演示,并且提供了一些很好的观点,包括Django可扩展性方面的(当前)缺陷。
-
惠普有一个使用Django 1.5构build的网站: ePrint中心 。 但是,对于novemer / 2015整个网站已经迁移,这个链接只是一个redirect。 本网站是全球范围内参与惠普(*)提供的Instant Ink和相关服务的订阅服务。
-
-
“Django能够每天处理100,000个用户,每个用户访问这个站点几个小时?”
是的,看上面。
-
“像Stack Overflow这样的站点能在Django上运行吗?
我的直觉是肯定的,但正如其他人的回答,Mike Malone在演讲中提到的那样,数据库devise是至关重要的。 如果我们能够find任何可靠的stream量统计数据,www.cnprog.com也可以find有力的证据。 无论如何,这不仅仅是将一堆Django模型扔在一起的事情:)
当然,还有更多的网站和博客感兴趣,但我必须停下来的地方!
博客文章使用Djangobuild立高stream量的网站michaelmoore.com被描述为一个前10000名的网站 。 Quantcast stats和competitive.com统计 。
(*)编辑的作者,包括这样的参考文献,曾经作为该项目的外包开发人员工作。
我们正在进行负载testing。 我们认为我们可以支持240个并发请求(24×7每秒120次点击的持续速率),而不会显着降低服务器的性能。 那将是每小时432,000次点击。 响应时间并不短(我们的交易量很大),但随着负载的增加,我们的基线性能没有下降。
我们正在使用Apache前端Django和MySQL。 操作系统是红帽企业Linux(RHEL)。 64位。 我们在Django的守护进程模式下使用mod_wsgi。 除了接受默认值之外,我们没有进行caching或数据库优化。
我们都在一个64位的戴尔(我认为)32Gb内存的虚拟机。
由于20或200个并发用户的性能几乎相同,所以我们不需要花费大量时间“调整”。 相反,我们只需要通过普通的SSL性能改进,普通的数据库devise和实现(索引等),普通的防火墙性能改进等来保持基本性能。
我们测量的是我们的负载testing笔记本电脑在15个进程的疯狂工作负载下挣扎,运行16个并发线程的请求。
不知道每天的访问次数,但这里有一些Django大型网站的例子:
- disqus.com ( 来自djangocon的讲话 )
- bitbucket.org ( 写出来 )
- lanyrd.com ( 来源 )
- support.mozilla.com ( 源码 )
- addons.mozilla.org ( 源代码 )( 从djangocon谈 )
- theonion.com ( 写出来 )
- guardian.co.uk评论系统使用Django( 源 )
- Instagram的
- Pinterest的
- RDIO
关于如何通过扩展来部署django的截屏http://ontwik.com/python/django-deployment-workshop-by-jacob-kaplan-moss/
这里是一个链接到高stream量的Django网站上的Quora列表。
什么是今天在Django上build立的“最大”的网站? (我主要测量用户stream量的大小)
在美国, 马哈洛 。 我被告知他们每个月处理大约一千万个独身者。
国外, Globonetworking(巴西的新闻,体育和娱乐网站); Alexa排名全球前100(目前约80)。
其他值得注意的Django用户包括PBS,国家地理,发现,美国国家航空和宇宙航行局(NASA)(以及美国国家航空航天局内的许多不同的部门)以及国会图书馆。
Django能够每天处理10万个用户,每个用户访问该网站几个小时?
是的 – 但只有当你写好你的应用程序,并且你有足够的硬件。 Django不是一个神奇的子弹。
像StackOverflow这样的网站可以在Django上运行吗?
是的(但看到上面)。
技术方面,很容易:看到soclone一个尝试。 在stream量方面,每个月在100万以下的独立游戏中竞争lockingStackOverflow。 我可以命名至less有十几个Django网站的stream量比SO多。
扮演恶魔的主张有点:
你应该检查由Cal Henderson提供的DjangoCon 2008 Keynote ,标题为“为什么我讨厌Django”,他几乎忽视了Django错过的一切,你可能想在高stream量的网站上做。 在这一天结束的时候,你必须以开放的态度来采取这一切,因为完全可以编写可扩展的Django应用程序,但是我认为这是一个很好的演示,并且与你的问题相关。
我所知道的最大的django网站是华盛顿邮报 ,它肯定会表明它可以很好地扩展。
好的devise决策可能比其他任何事情都有更大的性能影响。 Twitter经常被引用为一个网站,它体现了另一个基于dynamic解释语言的Web框架Ruby on Rails的性能问题 – 但Twitter工程师指出,框架并不像他们早期的一些数据库deviseselect上。
Django可以很好地与memcached配合使用,并提供一些用于pipe理caching的类,这是解决大部分性能问题的地方。 在networking上实现的内容几乎比实际的后端更重要 – 使用像yslow这样的工具对于高性能的Web应用程序至关重要。 你总是可以在后端抛出更多的硬件,但是你不能改变你的用户带宽。
扩展Web应用程序不是关于Web框架或语言,而是关于您的架构。 这是关于如何处理你的浏览器caching,你的数据库caching,你如何使用非标准的持久性提供者(如CouchDB ),如何调整你的数据库和很多其他的东西…
不要打扰…
那个星期我还参加了EuroDjangoCon会议,这是几个会谈的主题 – 包括来自什么是最大的Django网站Pownce( 这里是一个谈话的幻灯片)的创始人。 主要的信息是,你不必担心Django,但正确的caching,负载平衡,数据库优化等等。
Django实际上已经挂钩了大部分这些东西 – 特别是,高速caching变得非常容易。
我相信你正在寻找更加可靠的答案,但是我能想到的最明显的客观validation就是Google推动Django与App Engine框架一起使用。 如果有人经常了解和处理可扩展性,那就是Google。 从我读到的,最受限制的因素似乎是数据库的后端,这就是为什么谷歌使用自己的…
我想我们不妨把2011年的苹果应用程序( Instagram )添加到使用django的列表中。
像Stack Overflow这样的站点能在Django上运行吗?
Stack Overflow的中文版使用的是Django:
https://stackoverflow.com/questions/694966/impressed-or-angry-at-http-www-cnprog-com
是的,它可以。 它可以是Python或Ruby on Rails上的Django。 它仍然会扩展。
有几种不同的技术。 首先,caching不是缩放。 除了硬件平衡器外,您还可以将多个应用程序服务器与nginx平衡。 要在数据库方面进行扩展,如果使用RDBMS方式,可以在MySQL / PostgreSQL中使用读取从机进行相当程度的处理。
Django中一些stream量很大的网站的例子可能是:
- 当他们仍然在那里的时候。
- Discus(通用共享评论pipe理器)
- 所有报纸相关网站:华盛顿邮报等。
你可以感到安全。
今天我们使用许多networking应用程序和网站来满足我们的需 他们中的大多数是非常有用的。 我会告诉你一些python或django使用的。
华盛顿邮报
华盛顿邮报的网站是一个非常受欢迎的在线新闻来源,以配合他们的日报。 Django Web框架可以轻松处理其大量的视图和stream量。 Washington Post - 52.2 million unique visitors (March, 2015)
NASA
美国国家航空航天局的官方网站是查找正在进行的太空探索的新闻,图片和video的地方。 这Django网站可以轻松处理大量的意见和stream量。 2 million visitors monthly
守护者
卫报是由卫报传媒集团拥有的英国新闻和媒体网站。 它几乎包含了“卫报”和“观察报”的所有内容。 这个巨大的数据是由Django处理的。 The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)
YouTube的
我们都知道YouTube是上传猫video的地方,并且失败了。 作为最受欢迎的网站之一,它为我们提供了无尽的video娱乐时间。 Python编程语言支持它和我们所喜爱的function。
DropBox的
DropBox启动了已经成为日常生活一部分的在线文件存储革命。 我们现在几乎把所有东西都存储在云中。 Dropbox允许我们使用Python的强大function来存储,同步和共享几乎任何东西。
调查猴子
Survey Monkey是最大的在线调查公司。 他们每天可以在他们重写的Python网站上处理超过一百万个响应。
Quora的
Quora是在线提问并从个人社区接收答案的第一位。 在他们的Python网站上,相关结果由这些社区成员回答,编辑和组织。
Bitly
Bitly URL缩短服务和分析的大部分代码都是用Python构build的。 他们的服务每天可以处理数以亿计的事件。
书签交易
Reddit被称为互联网的首页。 它是在线查找基于数千个不同类别的信息或娱乐的地方。 post和链接是用户生成的,并通过投票提升到最高。 Reddit的许多function依赖于Python的function。
Hipmunk
Hipmunk是一个在线消费旅游网站,比较顶级旅游网站,find最好的交易。 这个Python网站的工具允许您find最便宜的酒店和航class为您的目的地。
点击这里获取更多信息: 25种最受欢迎的python-and-django网站 , Django上运行的知名网站
以下是在Django中build立的一些相当高调的事情的列表:
-
监护人的“ 调查你的议员开支 ”的应用程序
-
Politifact.com(这里是一篇关于(积极)体验的博客文章,网站赢得了普利策奖。
-
纽约时报“ 代表应用程序
-
EveryBlock
-
WaPo的程序员之一Peter Harkins在他的博客上列出了他们用Django创build的所有东西
-
这有点旧了,但“洛杉矶时报”的一个人给了他们为什么和Django一起去的基本概述 。
-
洋葱的AV俱乐部最近从(我认为Drupal)转移到了Django。
我想这些网站的数量可能会超过每天点击10万以上。 Django当然可以每天点击10万次以上。 但是YMMV根据你正在build造的东西来获得你的特定网站。
在Django级别有caching选项(例如cachingmemcached中的查询集和视图可以创造奇迹)以及超越(像Squid这样的上游caching)。 数据库服务器的规格也将是一个因素(通常是挥霍的地方),以及你调整它的程度。 例如,不要假设Django会正确设置索引。 不要以为默认的PostgreSQL或MySQLconfiguration是正确的。
而且,如果这是一个缓慢的点,那么您总是可以select让多个应用程序服务器运行Django,前面有一个软件或硬件负载平衡器。
最后,你是否在与Django相同的服务器上提供静态内容? 你使用Apache或类似nginx或lighttpd ? 你能负担得起使用CDN静态内容? 这是需要考虑的事情,但这都是非常投机的。 每天点击10万次不是唯一的variables:你想花多less钱? 你有多less专业知识pipe理所有这些组件? 你需要多less时间把它们放在一起?
请注意,如果您期望每天有10万用户,即一次激活了几个小时(意味着同时在线的用户数最多为20K),那么您将需要大量的服务器。 SO拥有约15,000名注册用户,其中大部分可能不是每天都活跃的。 虽然大部分的stream量来自未注册的用户,但我猜测他们中的很less人会在几分钟之内留在网站上(即他们跟随谷歌search结果离开)。
对于这个数量,至less需要30个服务器……每台服务器仍然有1000个并发用户。
另一个例子是rasp.yandex.ru,俄罗斯运输时间表服务。 它的出席率符合您的要求。
我一直在使用Django已经有一年多的时间了,对于如何将模块化,可伸缩性和开发速度结合起来,我印象深刻。 就像任何技术一样,它带有一条学习曲线。 但是,通过Django社区的优秀文档,这种学习曲线变得不那么陡峭。 Django已经能够处理我所投入的一切了。 看起来它将能够很好地扩展到未来。
BidRodeo Penny Auctions是一个中等大小的Django支持的网站。 这是一个非常有活力的网站,每天处理大量的页面浏览量。
如果你有一个静态内容的网站,那么把Varnish服务器放在前面会大大提高你的性能。 即使是一个盒子,也可以轻易地吐出100 Mbit / s的stream量。
请注意,对于dynamic内容,使用类似光泽的东西变得更加棘手。
YouTube的开发者支持者在PyCon 2012上发表了一篇关于缩放Python的文章 ,这也与缩放Django有关。
YouTube拥有10亿以上的用户 ,YouTube基于Python。
我对Django的经验是微乎其微,但是我确实记得在Django Book中他们有一个采访运行一些较大的Django应用程序的人的章节。 这是一个链接。 我想这可以提供一些见解。
它说,curse.com是最大的Django应用程序之一,一个月内页面浏览量大约在6000万到9000万之间。
正如高性能Django书中所述,在这里input链接描述,并通过这个Cal Henderson
请参阅下面提到的更多细节:
听到人们说“Django不缩放”并不罕见。 这取决于你如何看待它,这个陈述要么是完全正确的,要么是假的。 Django本身并没有扩展。
Ruby on Rails,Flask,PHP或数据库驱动的dynamic网站使用的任何其他语言也是如此。
不过,好消息是Django与一套caching和负载均衡工具进行了美妙的交互,这将允许它扩展到尽可能多的stream量。
与您可能在线阅读的内容相反,它可以这样做,而无需replace经常标记为“太慢”的核心组件,如数据库ORM或模板层。
Disqus每月的浏览量超过80亿次。 这些是一些巨大的数字。
这些团队已经certificate,Django肯定是有规模的。 我们在林肯环路的经验支持它。
我们已经build立了大型的Django网站,可以在Reddit主页上度过一天,而不必冒汗。
在这一点上,Django的扩展成功案例几乎不胜枚举。
它支持Disqus,Instagram和Pinterest。 想要更多的证据? 只有3名工程师(其中2人没有后端开发工程师),Instagram能够在Django上维持超过3000万用户
你绝对可以在Django运行一个高stream量的站点。 看看这个pre-Django 1.0,但仍然相关的post在这里: http : //menendez.com/blog/launching-high-performance-django-site/
看看这个叫做EveryBlock的微型新闻聚合器 。
它完全用Django写成。 实际上,他们是自己开发Django框架的人。
我不认为这个问题是关于Django缩放的。
我真的build议你看看你的架构,这将是什么将帮助你扩大需求。如果你得到了错误,没有指出如何好Django的performance。 性能!=规模。 你可以有一个性能惊人的系统,但不能扩展,反之亦然。
你的应用程序数据库绑定? 如果这是你的规模问题,那么也是如此。 你打算如何与Django的数据库进行交互? 当你的数据库不能像Django接受它一样快速地处理请求时会发生什么? 当数据超过一台物理机器时会发生什么? 你需要说明你如何处理这些情况。
而且,当你的stream量超过一个应用服务器时会发生什么? 在这种情况下如何处理会话可能会非常棘手,通常情况下您可能需要一个无共享架构。 这又取决于你的应用程序。
简而言之,语言不是决定规模的因素,一种语言是对性能负责的(同样取决于你的应用程序,不同的语言performance不同)。 这是您的devise和架构,使缩放成为现实。
我希望它有帮助,如果有任何问题,我很乐意进一步帮助。
如果你想使用开源,那么你有很多select。 但python是其中最好的,它有许多图书馆和超级棒的社区。 这些是可能改变你的想法的原因:
-
Python是非常好的,但它是一个解释的语言,使其缓慢。 但是许多加速器和caching服务在那里部分地解决了这个问题。
-
如果您正在考虑快速开发,那么Ruby on Rails是最好的。 这个(ROR)框架的主要格言是给开发者一个舒适的体验。 如果你比较Ruby和Python都有几乎相同的语法。
-
Google App Engine是非常好的服务,但它会绑定你的范围,你没有机会尝试新的东西。 而不是它,你可以使用数字海洋云,其中最简单的液滴只需要$ 5 /月的费用。 Heroku是另一项免费服务,您可以在其中部署您的产品。
-
是! 是! 你所听到的是完全正确的,但是这里有一些使用其他技术的例子
- Rails:Github,Twitter(以前),Shopify,Airbnb,Slideshare,Heroku等
- PHP:Facebook,维基百科,Flickr,雅虎,不倒翁,Mailchimp等
结论是框架或语言不会为你做任何事情。 更好的架构,devise和策略将给你一个可扩展的网站。 Instagram是最大的例子,这个小团队正在pipe理这么庞大的数据。 这里有一个关于它的架构的博客必须阅读它。
即使这里有很多很好的答案,我只想指出,没有人会强调。
这取决于应用程序
如果你的应用程序在写入的时候比较轻,就像你从DB读取的数据比你正在写的更多。 然后缩放django应该是相当微不足道的,嘿,它带来了一些相当体面的输出/视图caching直接开箱即用。 利用这一点,并说,redis作为caching提供商,把负载平衡器放在它前面,旋转n个实例,你应该能够处理非常大量的stream量。
现在,如果你每秒都要做数千次复杂的写操作呢? 不同的故事。 Django会是一个不好的select吗? 那么,不一定,取决于你如何devise你的解决scheme,以及你的要求是什么。
只是我的两分钱:-)
平均分配任务,简而言之,优化包括数据库,文件,图像,CSS等各个方面,并且一旦您的站点/应用程序开始增长,则需要与其他资源平衡负载。 或者你为它增加更多的空间。 像CDN,Cloud这样的最新技术的实施必须有大量的网站。 只是开发和调整应用程序不会给你百分之百满意,其他组件也发挥重要作用。
我使用Django为爱尔兰国家广播公司开发了高stream量网站。 它适合我们。 开发一个高性能的网站不仅仅是select一个框架。 一个框架将只是一个系统的一部分,它是最薄弱的环节。 如果问题是数据库查询速度缓慢,或者服务器或networkingconfiguration错误,那么使用最新的“X”框架并不能解决性能问题。
问题是不知道django是否可以缩放。
正确的方法是了解并了解哪些networkingdevise模式和工具可以在您的django / symfony / rails项目中得到很好的扩展。
一些想法可以是:
- 复用。
- 反向代理 例如:Nginx,Varnish
- Memcache会话。 例如:Redis
- 在你的项目和数据库的集群化负载平衡和容错:例如:docker
- 使用第三方来存储资产。 例如:Amazon S3
希望它有一点帮助。 这是我到山上的小石头。