web-dev-qa-db-ja.com

Djangoはスケールしますか?

私はDjangoを使ってWebアプリケーションを構築しています。私がDjangoを選んだ理由は:

  • 私はフリー/オープンソースのツールを使いたがっていました。
  • 私はPythonが好きで、それが 長期 言語であると感じますが、Rubyに関してはよくわかりませんでしたし、PHPは学ぶのがとても面倒なようでした。
  • 私はアイデアのためのプロトタイプを作成していて、将来についてあまり考えすぎていませんでした。開発速度が主な要因であり、私はすでにPythonを知っていました。
  • 将来的にGoogle App Engineへの移行が容易になることを私は知っていました。
  • Djangoは「いい」と聞いた。

私は自分の作品を発表することについて考えることに近づいているので、私は規模について心配し始めます。 Djangoのスケーリング機能について私が見つけた唯一の情報はDjangoチームによって提供されています(それらを無視することについては何も言っていませんが、これは明らかに客観的な情報ではありません...)。

私の質問:

  • 今日Django上に構築されている「最大」のサイトは何ですか? (私は主にユーザートラフィックによってサイズを測定します)
  • Djangoは 毎日10万人のユーザーを扱うことができます 、それぞれが数時間サイトを訪れた場合
  • Stack OverflowのようなサイトはDjango上で動作しますか?
1042
Roee Adler
  1. "今日のDjango上に構築された最大のサイトは何ですか?"

    Djangoで構築されたサイトのトラフィックに関する情報を収集する場所は1つもありません。そのため、さまざまな場所からのデータを使用して突き詰める必要があります。最初に、 メインのDjangoプロジェクトページ のフロントページにDjangoサイトのリストがあり、次に djangosites.org にDjangoが構築したサイトのリストがあります。リストを見て、私が知っているものを選んでください。

  2. "Djangoは1日に10万人のユーザーに対応できます。各ユーザーは数時間にわたってサイトにアクセスしますか?"

    はい、上記を見てください。

  3. "Stack OverflowのようなサイトはDjango上で動作しますか?"

    私の直感はそうですが、他の人が答えてMike Maloneが彼の発表で述べているように、データベース設計は重要です。信頼できる交通統計が見つかると、強力な証拠がwww.cnprog.comにも掲載されることがあります。とにかく、それはDjangoモデルの束を一緒に投げることによって起こるだろうということだけではありません:)

もちろん、他にもたくさんの興味深いサイトやブロガーがいますが、私はどこかでやめなければなりません!


Djangoを使用してトラフィックの多いサイトmichaelmoore.comを構築する についてのブログ投稿は トップ10,000のWebサイト として説明されています。 Quantcast統計 および compete.com統計


(*)そのような参照を含む、編集の作者は、そのプロジェクトでアウトソーシングされた開発者として働いていました。

839
Van Gale

現在ロードテストを行っています。サーバーのパフォーマンスを大幅に低下させることなく、240個の同時リクエスト(1秒間に120回のヒットを24時間×7日間)をサポートできると考えています。それは1時間あたり432,000ヒットになります。応答時間は短くはありませんが(トランザクションが大きい)、負荷が増加してもベースラインのパフォーマンスが低下することはありません。

我々はApacheフロントエンドのDjangoとMySQLを使用しています。 OSはRed Hat Enterprise Linux(RHEL)です。 64ビットDjangoではデーモンモードでmod_wsgiを使います。デフォルトを受け入れる以外にキャッシュやデータベースの最適化は行っていません。

私たちはみんな32Gb RAMを搭載した64ビットDellの一体型のVMです。

同時接続ユーザー数が20人または200人の場合でもパフォーマンスはほぼ同じなので、「微調整」に膨大な時間を費やす必要はありません。代わりに、通常のSSLパフォーマンスの向上、通常のデータベースの設計と実装(インデックス作成など)、通常のファイアウォールのパフォーマンス向上などを通じて、基本パフォーマンスを維持するだけでよいのです。

私たちが測定しているのは、16個の同時要求スレッドを実行している15個のプロセスという非常識な作業負荷の下で負荷テストのラップトップが苦労していることです。

251
S.Lott

毎日の訪問数についてはわかりませんが、大規模なDjangoサイトの例をいくつか紹介します。

これはQuoraの 高トラフィックDjangoサイトのリストへのリンクです

166
Neil

今日Django上に構築されている「最大」のサイトは何ですか? (私は主にユーザートラフィックによってサイズを測定します)

アメリカでは、 Mahalo でした。私は彼らが月におよそ1000万のユニークを扱うと言われています。さて、2019年に、MahaloはRuby on Railsによって動かされます。

海外では、 Globo network(ブラジルのニュース、スポーツ、エンターテイメントのサイトのネットワーク)。 Alexaはそれらを世界的にトップ100にランク付けしています(現在80位前後)。

他の注目すべきDjangoユーザーには、PBS、National Geographic、Discovery、NASA(実際にはNASA内のさまざまな部門)、および米国議会図書館が含まれます。

Djangoは1日に10万人のユーザーを相手に数時間訪問することができますか?

はい - ただし、アプリケーションを正しく作成した場合、および十分なハードウェアを持っている場合に限ります。 Djangoは魔法の弾丸ではありません。

StackOverflowのようなサイトをDjangoで動かすことができますか?

はい(でも上記参照).

技術的には、簡単: soclone を1回試してみること。トラフィック的には、毎月100万を下回るユニークな数のStackOverflowが競合しています。私はSO以上のトラフィックを持つDjangoのサイトを少なくとも1つ挙げることができます。

98
jacobian

Webアプリケーションのスケーリングは、Webフレームワークや言語に関するものではなく、アーキテクチャに関するものです。ブラウザキャッシュ、データベースキャッシュ、非標準の持続性プロバイダ( CouchDB など)の使用方法、データベースの調整方法、およびその他のさまざまな処理方法に関するものです。

80
razenha

悪魔の擁護者を少し演じる:

DjangoCon 2008 Keynote をチェックする必要があります。 Cal Henderson が提供する「Why I hate Django」というタイトルで、彼はほとんどすべてを調べますDjangoがありませんトラフィックの多いウェブサイトでやりたいかもしれません。一日の終わりに、あなたはこれをすべてオープンマインドで取り扱わなければなりません。なぜなら、は完全にスケール可能なアプリを書くことができるからですDjango良いプレゼンテーションであり、あなたの質問に関連していました。

78

私が知っている最大のDjangoサイトは Washington Post です。これは確かに can がうまくスケールできることを示しています。

適切な設計上の決定は、おそらく他の何よりもパフォーマンスへの影響が大きくなります。 Twitterは、他の動的インタプリタ言語ベースのWebフレームワークであるRuby on Railsのパフォーマンスの問題を具体化しているサイトとしてよく引用されています。に。

Djangoはmemcachedと非常にうまく連携し、キャッシュを管理するためのクラスをいくつか提供しています。ここでパフォーマンスの問題の大部分を解決します。あなたがネットワーク上で配信するものは、実際にはあなたのバックエンドよりもほとんど重要です - yslowのようなツールを使用することは高性能Webアプリケーションにとって重要です。あなたはいつでもあなたのバックエンドにより多くのハードウェアを投入することができますが、あなたはあなたのユーザーの帯域幅を変更することはできません。

49
Bayard Randel

私は先週、EuroDjangoConカンファレンスに参加しました。これは、Djangoを拠点とする最大のサイトであるPownceの創設者からの話を含めて、数回の話題の主題でした(1話のスライド here )。主なメッセージは、それがあなたが心配しなければならないDjangoではないということですが、適切なキャッシング、負荷分散、データベース最適化などのようなものです。

Djangoは実際にこれらのことの大部分にフックを持っています - 特にキャッシングはとても簡単になります。

30
Daniel Roseman

私はあなたがもっとしっかりした答えを探していると確信しています、しかし私が考えることができる最も明白な客観的な検証はGoogleが App Engine フレームワークとの使用のためにDjangoを推し進めることです。スケーラビリティについて誰かが定期的に知っていて対処しているのであれば、それはGoogleです。私が読んだものから、最も制限的な要因はデータベースバックエンドであるように思われます、それはグーグルが彼ら自身のものを使う理由です...

23
jess

High Performance Django Book に書かれているように、そしてこれを見てください Cal Henderson

下記の詳細を参照してください。

“ Djangoはスケールされていません” と言うのを聞くのは珍しいことではありません。あなたがそれをどのように見ているかに依存して、そのステートメントは完全に真実か明らかに偽です。 Djangoは、それだけでは拡張できません。

Ruby on Rails、Flask、PHP、またはデータベース駆動型の動的Webサイトで使用されている他の言語についても同じことが言えます。

ただし、良いニュースは、Djangoが一連のキャッシングツールおよび負荷分散ツールと美しく相互作用することです。これらのツールを使用すると、できるだけ多くのトラフィックに対応できるようになります。

オンラインで読んだものとは反対に、データベースORMやテンプレートレイヤなど、「遅すぎる」とラベル付けされているコアコンポーネントを置き換えることなく、オンラインで読むことができます。

Disqusは、1か月に80億を超えるページビューを提供しています。それらはいくつかの非常に大きな数です。

これらのチームはDjangoが最も確実に拡張できることを証明しました。ここLincoln Loopでの経験がそれを裏付けています。

Redditのホームページで一日を過ごすことができるDjangoの大規模なサイトを構築しました。

現時点では、Djangoのスケーリングの成功事例は数え切れないほどです。

それはDisqus、Instagramの、そしてPinterestをバックアップします。もう少し証明したいですか? Instagramはわずか3人のエンジニア(うち2人はバックエンド開発をしていなかった)でDjangoで3000万人以上のユーザーを維持することができた

16
Mushahid Khan

今日私達は私達の必要性のために多くのウェブアプリとサイトを使っています。それらのほとんどは非常に便利です。私はPythonやDjangoで使われているそれらのいくつかを紹介します。

ワシントンポスト

Washington Postのウェブサイトは、日刊紙に付随する人気の高いオンラインニュースソースです。その膨大なビューとトラフィックは、DjangoのWebフレームワークで簡単に処理できます。 Washington Post - 52.2 million unique visitors (March, 2015)

_ナサ_

National Aeronautics and Space Administrationの公式ウェブサイトは、進行中の宇宙探査に関するニュース、写真、およびビデオを見つけるための場所です。このDjangoのWebサイトでは、大量のビューやトラフィックを簡単に処理できます。 2 million visitors monthly

保護者

The Guardianは、Guardian Media Groupが所有するイギリスのニュースおよびメディアWebサイトです。それは新聞ガーディアンとオブザーバーの内容のほとんどすべてを含みます。この巨大なデータはDjangoによって処理されます。 The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)

YouTube

私たちはみんな猫の動画をアップロードする場所としてYouTubeを知っていて失敗します。現存する最も人気のあるウェブサイトの1つとして、それは私たちに無限の時間のビデオエンターテイメントを提供します。 Pythonプログラミング言語がそれを強化し、私たちが大好きな機能を提供します。

ドロップボックス

DropBoxは、日常生活の一部となっているオンライン文書保存革命を始めました。私たちは今、ほとんどすべてをクラウドに保存しています。 Dropboxを使うと、Pythonのパワーを使ってほとんどすべてのものを保存、同期、共有できます。

サーベイモンキー

Survey Monkeyは最大のオンライン調査会社です。彼らは彼らの書き換えられたPythonウェブサイトで毎日100万以上の応答を処理することができます。

コーラ

Quoraは、質問をしたり、個人のコミュニティーから回答を受け取ったりするのにオンラインで一番の場所です。彼らのPythonウェブサイトでは、関連する結果がこれらのコミュニティメンバーによって答えられ、編集され、そして組織されています。

ちょっと

Bitly URL短縮サービスおよび分析のためのコードの大部分は、すべてPythonで構築されています。彼らのサービスは、1日に何億ものイベントを処理することができます。

Reddit

Redditはインターネットのフロントページとして知られています。それは何千もの異なるカテゴリに基づいて情報や娯楽を見つけるためのオンラインの場所です。投稿とリンクはユーザーによって生成され、投票を通じてトップに昇格します。 Redditの機能の多くは、その機能をPythonに依存しています。

Hipmunk

Hipmunkはあなたに最高のお得な情報を見つけるためにトップの旅行サイトを比較するオンライン消費者旅行サイトです。このPython Webサイトのツールを使用すると、目的地に最も安いホテルやフライトを見つけることができます。

もっと見るにはここをクリック: 最も人気のあるpython-and-Djangoの25のウェブサイトDjangoで動いている有名なサイト

16
Simplans

Djangoを集中的に使用するリストに、2011年のAppleのApp of the year、 Instagram を追加することも考えます。

15
Milind

はい、できます。 PythonのDjangoか、RailsのRubyです。それでも規模は変わります。

いくつかの異なるテクニックがあります。まず、キャッシングは拡大縮小ではありません。ハードウェアバランサに加えて、フロントとしてnginxとバランスの取れた複数のアプリケーションサーバーを持つことができます。データベース側で拡張するには、RDBMSの方法を使えばMySQL/PostgreSQLのread slaveでかなり遠くへ行くことができます。

Djangoのトラフィックの多いWebサイトの良い例は次のとおりです。

  • Pownce 彼らがまだそこにいた時。
  • ディスカス(一般的な共有コメントマネージャ)
  • すべての新聞関連のウェブサイト:ワシントンポストなど。

あなたは安全に感じることができます。

11
coulix

これはDjangoで作られた比較的目立つもののリストです:

  1. ガーディアンの「 あなたのMPの経費を調べる 」アプリ

  2. Politifact.com(ここに ブログ記事 (ポジティブな)経験について話しているサイトがピューリッツァーを獲得した。

  3. NY Times ' 代理 app

  4. EveryBlock

  5. WaPoのプログラマーでもあるPeter Harkins氏は、 Djangoで構築したすべてのものをリストアップしています 彼のブログで

  6. それは少し古いですが、LA Timesの誰かが 基本的な概要を説明しました そしてなぜ彼らがDjangoを使ったのかについて。

  7. タマネギのAVクラブは最近(私はDrupalだと思う)Djangoに移動しました。

私はこれらのサイトの多くがおそらく一日あたり100k +ヒット以上になるだろうと思います。 Djangoは確かに100,000ヒット/日以上を実行できます。しかし、YMMVはあなたが構築しているものによってあなたの特定のサイトをそこに持ってくることになります。

Djangoレベル( memcached にクエリセットやビューをキャッシュするなど)やそれ以上( Squid のような上流のキャッシュ)にはキャッシュオプションがあります。データベースサーバーの仕様も要因となります(そして通常は急増する場所でもあります)。たとえば、Djangoが適切にインデックスを設定すると仮定しないでください。デフォルトの PostgreSQL または MySQL の設定が正しいと仮定しないでください。

さらに、ソフトウェアまたはハードウェアのロードバランサーを前面にして、複数のアプリケーションサーバーでDjangoを実行するのが遅い場合は、いつでも選択できます。

最後に、Djangoと同じサーバー上で静的コンテンツを提供していますか? Apacheを使っていますか、それとも nginx または lighttpd のようなものですか。静的コンテンツに _ cdn _ を使用する余裕がありますか?これらは考えるべき事柄ですが、それはすべて非常に投機的です。 10万ヒット/日が唯一の変数ではありません:あなたはいくらを使いたいですか?これらすべてのコンポーネントをどの程度管理していますか。あなたはそれをすべて一緒に引っ張るのにどれくらいの時間を要しますか?

9
mazelife

YouTubeの開発者擁護者は PyCon 2012でPythonのスケーリングについての話をしました 、これはDjangoのスケーリングにも関連しています。

YouTubeには 10億人以上のユーザーがいます 、そしてYouTubeはPythonをベースにしています。

8
orokusaki

私はDjangoを1年以上使ってきましたが、モジュール性、スケーラビリティ、そして開発のスピードをいかにうまく組み合わせているかに非常に感銘を受けています。他のテクノロジと同様に、学習曲線もあります。しかしながら、この学習曲線はDjangoコミュニティからの優れた文書化によってそれほど急勾配にはなりません。 Djangoは私が投げたものすべてを本当にうまく処理することができました。将来的には十分に拡張できるようになります。

BidRodeo Penny Auctions は中くらいの大きさのDjangoを使ったウェブサイトです。これは非常に動的なWebサイトであり、1日に大量のページビューを処理します。

7

1日に10万人のユーザーが一時間に何時間もアクティブであることを期待している場合(最大20K +の同時ユーザーを意味する)、たくさんのサーバーが必要になるでしょう。 SOには〜15,000人の登録ユーザーがいます、そして、それらのほとんどはおそらく毎日活動的ではありません。大量のトラフィックが未登録のユーザーから来ている間、私は彼らのうちほんの2、3分以上サイトにとどまっているのはごく少数だと思います(すなわち、彼らはグーグルの検索結果をたどってその後去ります)。

そのボリュームでは、少なくとも30台のサーバーを想定してください。これは、サーバーあたり1,000人の同時ユーザーがまだかなり多いということです。

6
Beep beep

今日Django上に構築されている "最大"のサイトは何ですか? (私は主にユーザーのトラフィックによってサイズを測定します) Pinterest
disqus.com
さらに詳しく https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-Django-websites/

Djangoは1日に10万人のユーザーを扱えます。それぞれのユーザーは数時間にわたってサイトを訪れます。
はい、ただし適切なアーキテクチャ、データベース設計、キャッシュの使用、ロードバランスの使用、複数のサーバー/ノードの使用

DjangoでStack Overflowのようなサイトを動かすことができますか?
はい、ちょうど2番目の質問で述べられている答えに従う必要があります

5
Ranju R

別の例は、rasp.yandex.ru、ロシアの輸送時刻表サービスです。その出席はあなたの要求を満たします。

5
Glader

もしあなたがサイトにスタティックコンテンツを持っているなら、 Varnish サーバーを正面に置くことであなたのパフォーマンスは劇的に向上するでしょう。 1箱でも100 Mbit/sのトラフィックを簡単に吐き出すことができます。

動的コンテンツでは、Varnishのようなものを使用するのがはるかに難しいことに注意してください。

5

私のDjangoでの経験は最小限ですが、The Django Bookには、大規模なDjangoアプリケーションを実行している人々にインタビューする章があることを覚えています。 これはリンクです。 それはいくつかの洞察を提供することができると思います。

それはcurse.comが1ヶ月でおよそ6,000万から9000万ページビューを持つ最大のDjangoアプリケーションの1つであると言います。

5
tomeedee

ここにはたくさんの素晴らしい答えがありましたが、私はただ指摘したような気がします。だれも強調していません。

アプリケーションによって異なります

あなたが書いているよりもずっとたくさんのデータをDBから読んでいるように、あなたのアプリケーションが書き込みに軽いならば。それならDjangoのスケーリングはかなり簡単なはずですね。まあまあまあまあまあまあまあまあのアウトプット/ビューキャッシングがあります。それを利用してください、そして、例えば、キャッシュプロバイダーとしてredis、それの前にロードバランサーを置き、n-インスタンスをスピンアップすれば、あなたは非常に大量のトラフィックを処理することができるはずです。

今、あなたが1秒間に何千もの複雑な書き込みをしなければならないならば?別の話。 Djangoは悪い選択になるのでしょうか?必ずしもそうとは限りませんが、ソリューションを実際にどのように設計しているか、また要件は何によって決まるかによって異なります。

ちょうど私の2セント:-)

4
JustDanyul

アイルランドの全国放送局にDjangoを使ってトラフィックの多いサイトを開発しています。それは私達にとってはうまくいきます。高性能サイトを開発することは、単にフレームワークを選択することだけではありません。フレームワークは、最も弱いリンクと同じくらい強いシステムの一部にすぎません。最新のフレームワーク「X」を使用しても、問題がデータベースの照会が遅い、またはサーバーやネットワークの設定が悪い場合は、パフォーマンスの問題を解決できません。

4
redsnapper

この問題が本当にDjangoのスケーリングに関するものではないと思います。

自分のアーキテクチャを調べて、ニーズを拡張できるようにすることをお勧めします。それが間違っていても、Djangoのパフォーマンスには意味がありません。パフォーマンス!=規模。あなたは素晴らしいパフォーマンスを持っていますが、その逆もまた同じではないシステムを持つことができます。

アプリケーションデータベースはバインドされていますか?もしそうなら、あなたのスケールの問題も同様にそこにあります。 Djangoのデータベースとどのようにやり取りする予定ですか? Djangoが要求を受け入れるのと同じくらい速くデータベースが要求を処理できないとどうなりますか?データが1台の物理マシンを上回るとどうなりますか。あなたはあなたがそれらの状況にどう対処することを計画しているかを説明する必要があります。

さらに、トラフィックが1台のアプリサーバーを上回るとどうなりますか。この場合のセッションの扱い方は、おそらくシェアードナッシングアーキテクチャを必要とするというよりもはるかに頻繁になります。これもアプリケーションによって異なります。

簡単に言うと、言語は規模を決定するものではなく、言語はパフォーマンスに責任があります(これもアプリケーションによって異なりますが、言語によってパフォーマンスが異なります)。スケーリングを現実にするのはあなたのデザインとアーキテクチャです。

私はそれが助けを願っています、あなたが質問をするならばさらに助けて喜んでいるでしょう。

3
Anand Davis

EveryBlock というこのマイクロニュースアグリゲーターをチェックしてください。

それは完全にDjangoで書かれています。実際、彼らはDjangoフレームワーク自体を開発した人々です。

3
siddu

あなたは間違いなくDjangoでトラフィックの多いサイトを運営することができます。このDjango 1.0以前の記事をチェックしてください。まだ関連記事はここにあります: http://menendez.com/blog/launching-high-performance-Django-site/ /

3
Ed Menendez

あなたがオープンソースを使いたいのなら、あなたにはたくさんの選択肢があります。しかし、pythonはそれらの中でも最高です。それは多くのライブラリと超素晴らしいコミュニティを持っています。これらはあなたの心を変えるかもしれない理由です:

  • Pythonはとても優れていますが、インタプリタ言語であるため遅くなります。しかし、この問題を部分的に解決する多くのアクセラレータサービスとキャッシュサービスがあります。

  • あなたが急速な開発を考えているならば、Ruby on Railsはとりわけ優れています。この(ROR)フレームワークの主なモットーは、開発者に快適な体験を提供することです。 RubyとPythonを比較すると、どちらもほぼ同じ構文です。

  • Google App Engineは非常に優れたサービスですが、その範囲に縛られますので、新しいことを試す機会はありません。その代わりにあなたは Digital Ocean cloudを使うことができますが、これは最も単純なドロップレットのために$ 5/Monthの料金を支払うだけです。 Heroku は、製品をデプロイできるもう1つの無料サービスです。

  • はい!はい!あなたが聞いたことは全く正しいですが、ここに他の技術を使っているいくつかの例があります

    • レール:Github、Twitter(以前)、Shopify、Airbnb、Slideshare、Herokuなど。
    • PHP:Facebook、Wikipedia、Flickr、Yahoo、Tumbler、Mailchimpなど.

結論はフレームワークであり、言語があなたのためにすべてをするわけではありません。より良いアーキテクチャ、デザイン、そして戦略はあなたにスケーラブルなウェブサイトを与えるでしょう。 Instagramがその最大の例です。この小さなチームがそのような巨大なデータを管理しています。これが ブログ ですそのアーキテクチャについて読む必要があります。

3
pulkit

問題はDjangoが拡張可能かどうかを知ることではありません。

正しい方法はあなたのDjango/symfony/Railsプロジェクトの下にどのネットワークデザインパターンとツールが適切に拡張できるかを理解し知ることです。

いくつかのアイデアがあります:

  • 多重化.
  • 逆プロキシ例:Nginx、ワニス
  • Memcacheセッション例:レディス
  • ロードバランシングとフォールトトレランスのためのあなたのプロジェクトとdb上のクラスタ化:例:Docker
  • 資産を保管するために第三者を使用する。例:Amazon S3

それが少し役立つことを願っています。これは私の山への小さな岩です。

2
gmourier

サイト、アプリケーションが成長し始めたら、DB、ファイル、画像、CSSなどを含むあらゆる側面を一様に最適化し、他のいくつかのリソースと負荷のバランスをとることで、タスクを均等に分散させる必要があります。 ORあなたはそれを成長させるためのもう少しのスペースを作ります。 CDN、クラウドのような最新の技術の実装は巨大なサイトで必須です。アプリケーションを開発して微調整しただけでは、満足度は向上しません。他のコンポーネントも重要な役割を果たします。

2
Ashwin