Django可以缩放吗?

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

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

现在我越来越接近考虑发表我的作品,我开始担心规模。我发现的关于Django扩展能力的唯一信息是由Django团队提供的(我不是说要忽视他们,但这显然不是客观信息……)。

我的问题:

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

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

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

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

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

Django可以很好地与memcache配合使用,并提供了一些用于管理缓存的类,这可以解决大部分性能问题。实际上,你在网上交付的内容几乎比你的后端更重要——使用yslow这样的工具对于高性能Web应用程序至关重要。你可以随时在后端投入更多硬件,但你不能改变用户的带宽。

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

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

几乎没有不同的技术。首先,缓存不是伸缩。除了硬件平衡器之外,还可以使用几个应用服务器以 nginx 作为前端进行平衡。 为了在数据库方面进行扩展,如果采用 RDBMS 方式,那么在 MySQL/PostgreSQL 中使用读从数据库可以做得很好。

Django 网站流量大的一些好例子可以是:

你会感到安全。

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

对于这个数量,预计至少有30个服务器... 这仍然是一个相当沉重的1000个并发用户每个服务器。

前几周我参加了 EuroDjangoCon 的会议,这是几个演讲的主题——包括来自最大的 Django 网站的创始人 Pownce 的演讲(来自一个演讲 给你的幻灯片)。主要的信息是,您需要担心的不是 Django,而是恰当的缓存、负载平衡、数据库优化等等。

实际上,Django 为大多数这样的事情都提供了钩子——特别是缓存,非常容易。

扮演一下恶魔的代言人:

你应该检查的 DjangoCon 2008主题演讲,由 Cal Henderson提供,题为“为什么我恨姜戈”,他几乎一切的姜戈是缺少,你可能想在一个高流量的网站。在一天结束的时候,你必须以一种开放的心态来看待这一切,因为 完全有可能写出这样规模的 Django 应用程序,但我认为这是一个很好的演示,与你的问题相关。

  1. “现在在姜戈上建造的最大的网站是什么?”

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

  2. “ Django 每天可以处理10万用户,每个用户访问网站几个小时吗?”

    是的,看上面。

  3. “ Stack Overflow 这样的站点能在 Django 上运行吗?”

    我的直觉是肯定的,但是,正如其他人的回答和 Mike Malone 在他的演讲中提到的,数据库设计是至关重要的。如果我们能找到任何可靠的流量统计数据,也可以在 www.cnpro.com 上找到有力的证据。不管怎么说,这不仅仅是一堆姜戈模特的事情:)

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


关于 使用 Django 建立高流量的网站 michaelmoore.com的博文被描述为 排名前10,000的网站.Quantcast 统计数据Compete.com 统计


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

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

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

我们都在一个64位的32Gb 内存的戴尔虚拟机上。

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

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

另一个例子是 rasp.yandex.ru,俄罗斯运输时刻表服务。

缩放 Web 应用程序不是关于 Web 框架或语言,而是关于你的架构。 这是关于你如何处理你的浏览器缓存,你的数据库缓存,你如何使用非标准的持久性提供者(如 CouchDB) ,如何调优你的数据库和许多其他的东西..。

你完全可以在 Django 中运行一个高流量的站点

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

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

我已经使用 Django 一年多了,对于它如何将模块化、可伸缩性和开发速度结合起来,我印象非常深刻。就像任何技术一样,它有一个学习曲线。然而,Django 社区的优秀文档使这种学习曲线变得不那么陡峭。姜戈能很好地处理我给他的一切。看起来它将能够很好地扩展到未来。

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

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

在美国,这是 谢谢。我听说他们每个月处理大约一千万个独立电话。现在,在2019年,Mahalo 由 Ruby on Rails 支持。

在国外,环球报网络(巴西的一个新闻、体育和娱乐网站的网络) ; Alexa 将它们排在全球前100位(目前排在第80位左右)。

其他著名的 Django 用户包括 PBS,国家地理,发现,美国宇航局(实际上是美国宇航局内部的一些不同部门) ,和国会图书馆。

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

是的——但前提是您的应用程序编写正确,并且有足够的硬件。姜戈不是魔法子弹。

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

是的(但见上文)。

技术方面,很容易: 参见 气旋的一次尝试。在流量方面,竞争将 StackOverflow 限制在每月不到100万个惟一值。我能说出至少十几个流量超过 SO 的 Django 网站。

下面是一些在姜戈制造的相对引人注目的东西:

  1. 卫报的“ 调查你的宪兵的开销”应用程序

  2. Politifact.com (这里有一个 博客文章谈论(积极的)经验。网站赢得了普利策奖。

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

  4. EveryBlock

  5. Peter Harkins,华盛顿邮报的程序员之一,在他的博客上发表了 列出了他们和姜戈一起建造的所有东西

  6. 有点老了,但是洛杉矶时报 给出了一个基本的概述的人告诉我他们为什么选姜戈。

  7. 洋葱的 AV 俱乐部最近从(我想是 Drupal)转移到了姜戈。

我想其中一些网站每天的点击量可能超过10万次。姜戈当然可以做10万点击量/天和更多。但 YMMV 在获得您的特定网站在那里取决于您正在建设的。

在 Django 级别有缓存选项(例如,在 Memcached中缓存查询集和视图可以创造奇迹)和更高级别的缓存(如 乌贼等上游缓存)。数据库服务器规范也是一个因素(通常是挥霍的地方) ,就像您对它进行了多好的调优一样。例如,不要假设 Django 会正确地设置索引。不要假设默认的 PostgreSQLMySQL配置是正确的。

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

最后,您是否在与 Django 相同的服务器上提供静态内容?你正在使用 Apache 或者类似于 Nginx或者 Lighttpd的东西吗?对于静态内容,您能够使用 CDN吗?这些都是需要考虑的事情,但都是非常投机的。10万次点击/天不是唯一的变量: 你想花多少钱?您有多少管理所有这些组件的专业知识?你需要多少时间来振作起来?

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

它完全是用 Django 写的,实际上是他们自己开发了 Django 框架。

YouTube 的开发者支持者给出了一个 在 PyCon 2012上讨论如何扩展 Python,这也与 Django 的缩放相关。

YouTube 拥有不止一个 十亿用户,而 YouTube 是基于 Python 构建的。

平均分配任务,简而言之,优化每个方面,包括数据库、文件、图像、 CSS 等,并且在网站/应用程序开始增长时,平衡其他资源的负载是必要的。或者你给它更多的生长空间。实现最新的技术,如 CDN,云是必须与庞大的网站。仅仅开发和调整一个应用程序不会给您带来百分之百的满意度,其他组件也起着重要的作用。

我认为我们不妨把苹果公司的2011年度应用程序 照片分享加入到强烈使用 django 的名单中。

我开发高流量的网站使用 Django 在爱尔兰的国家广播公司。这对我们很有用。开发一个高性能的站点不仅仅是选择一个框架。框架只是系统的一部分,它的强度取决于它最薄弱的环节。如果问题是数据库查询速度慢或者服务器或网络配置不当,那么使用最新的框架“ X”不会解决性能问题。

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

正确的方法是理解并知道哪些网络设计模式和工具可以放在 django/symfony/ails 项目下以便进行良好的伸缩。

有些想法可以是:

  • 多路复用。
  • 反向代理,例如: Nginx,Varnish
  • Memcache 会话,例如: Redis
  • 项目集群化和用于负载平衡和容错的 db: Ex: Docker
  • 使用第三方存储资产。例如: 亚马逊 S3

希望能有所帮助,这是我通往山顶的小石头。

我觉得问题不在于姜戈的伸缩性。

我真的建议您研究一下自己的架构,这将有助于满足您的扩展需求。表演!= 比例。你可以有一个系统,有惊人的性能,但不伸缩,反之亦然。

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

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

简而言之,决定规模的不是 语言,而是语言的性能(同样取决于您的应用程序,不同的语言的性能也不同)。正是您的设计和架构使伸缩成为现实。

我希望这有所帮助,如果你有问题,我很乐意提供进一步的帮助。

正如在《高性能》(High Performance)一书中所说,Django Book 看看这个卡尔 · 亨德森(Cal Henderson)

详情见下文:

听到人们说 “姜戈无法攀登”是很常见的。这取决于您如何看待它,该语句要么是完全正确的,要么是明显错误的。姜戈本身是无法扩张的。

这同样适用于 Ruby on Rails、 Flask、 PHP 或任何其他由数据库驱动的动态网站所使用的语言。

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

与你在网上看到的相反, 它可以在不替换通常标记为“太慢”的核心组件(如数据库 ORM 或模板层)的情况下完成此操作。

Disqus 每月的页面浏览量超过80亿,这是一个庞大的数字。

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

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

Django 的扩展成功故事实在太多了,以至于无法在这里列出来。

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

如果你想使用开源软件,有很多选择。但是 python 是其中最好的,因为它有许多库和一个超级棒的社区。 以下是一些可能改变你想法的原因:

  • Python 非常好,但它的直译语言让它变慢了。但是许多加速器和缓存服务部分地解决了这个问题。

  • 如果你正在考虑快速开发,那么 RubyonRails 是最好的。这个(ROR)框架的主旨是为开发人员提供舒适的体验。如果你比较一下 Ruby 和 Python,你会发现它们的语法几乎是一样的。

  • 谷歌应用程序引擎是非常好的服务,但它会束缚你在其范围内,你没有机会尝试新的东西。你可以用 数码海洋云来代替它,因为它最简单的液滴只需要 每月5元充电。你好是另一个可以部署产品的免费服务。

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

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

结论是一个框架或语言不会为您做一切。一个更好的架构,设计和策略将给你一个可伸缩的网站。Instagram 是最大的例子,这个小团队管理着如此庞大的数据。这里有一个关于它的体系结构的 博客必须读取它。

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

它取决于应用程序

如果您的应用程序写入较少,那么从数据库读取的数据要比写入的数据多得多。然后扩展 django 应该是相当简单的,见鬼,它带有一些相当不错的输出/视图缓存直接开箱即用。利用这一点,比方说,reis 作为一个缓存提供者,在它前面放一个负载平衡器,旋转 n 个实例,您应该能够处理非常大量的流量。

现在,如果你要做成千上万的复数写一秒钟?那就另当别论了。姜戈会是个错误的选择吗?不一定,这取决于您如何真正地构建解决方案,以及您的需求是什么。

我只想说: -)

今天,我们使用许多网络应用程序和网站来满足我们的需要。大多数都非常有用。我将向您展示一些蟒蛇或姜戈使用的工具。

华盛顿邮报

华盛顿邮报的网站是一个非常受欢迎的在线新闻来源,与他们的日报。它的大量视图和流量可以通过 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 开启了在线文档存储革命,已经成为日常生活的一部分。我们现在几乎把所有东西都存储在云中。Dropbox 允许我们使用 Python 存储、同步和分享几乎所有东西。

调查猴

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

Quora

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

一点点

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

Reddit

Reddit 被称为互联网的头版。这是一个在线寻找信息或娱乐的地方,基于成千上万的不同类别。帖子和链接是用户生成的,通过投票提升到顶端。Reddit 的许多功能都依赖于 Python 实现其功能。

Hipmunk

Hipmunk 是一个在线消费者旅游网站,它通过比较顶级旅游网站来为你找到最优惠的产品。这个 Python 网站的工具可以让你找到最便宜的酒店和机票。

点击这里了解更多: 25个最受欢迎的 python 和 django 网站, 那些在姜戈身上运行的知名网站是什么

今天在 Django 上建立的“最大”的网站是什么? (我主要通过用户流量来衡量规模) Pinterest
Disqus.com
更多内容请点击这里: http://www.shuup.com/en/blog/25-of-the-most-popent-python-and-django-pages/”rel = “ nofollow norefrer”> https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-django-websites/

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

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