Шкала Django?

Я создаю веб-приложение с Django. Причины, по которым я выбрал Django, были:

  • Я хотел работать со свободными / open-source инструментами.
  • Мне нравится Python и чувствую, что это «долгосрочный» язык, тогда как в отношении Ruby я не был уверен, и PHP казался огромной проблемой для изучения.
  • Я строю прототип идеи и не думал слишком много о будущем. Скорость разработки была основным фактором, и я уже знал Python.
  • Я знал, что переход на Google App Engine будет проще, если я захочу сделать это в будущем.
  • Я слышал, что Django был «приятным».

Теперь, когда я приближаюсь к размышлению о публикации своей работы, я начинаю беспокоиться о масштабах. Единственная информация, которую я нашел о возможностях масштабирования Django, предоставлена ​​командой Django (я не говорю ничего, чтобы игнорировать их, но это явно не объективная информация …).

Мои вопросы:

  • Что такое «самый большой» сайт, который сегодня построен на Django? (Я измеряю размер в основном по пользовательскому трафику)
  • Может ли Django обрабатывать 100 000 пользователей ежедневно, каждый из которых посещает сайт в течение нескольких часов?
  • Может ли такой сайт, как Stack Overflow, запускаться на Django?

  1. «Каковы крупнейшие сайты, построенные на Django сегодня?»

    Не существует ни одного места, которое собирает информацию о трафике на сайтах, построенных на Django, поэтому мне нужно будет нанести удар, используя данные из разных мест. Во-первых, у нас есть список сайтов Django на главной странице главной страницы проекта Django, а затем список сайтов, построенных Django на djangosites.org . Просматривая списки и выбирая некоторые, которые, как я знаю, имеют приличный трафик, мы видим:

    • Instagram : Instagram Instagram: сотни экземпляров, десятки технологий .

    • Pinterest : Alexa ранга 37 (21.4.2015) и 70 миллионов пользователей в 2013 году

    • Bitbucket : 200 Тбайт кода и 2.500.000 пользователей

    • Disqus : обслуживает 400 миллионов человек с Python .

    • curse.com : 600k ежедневных посещений .

    • tabblo.com : 44k ежедневных посещений , см. сообщения Ned Batchelder. Инфраструктура для современных веб-сайтов .

    • chesspark.com : Alexa ранга около 179k.

    • pownce.com (больше не активен): alexa ранг около 65 тысяч. Майк Мэлоун из Pownce, в своей презентации EuroDjangoCon по масштабированию Django Web Apps говорит «сотни просмотров в секунду». Это очень хорошая презентация о том, как масштабировать Django, и дает некоторые хорошие моменты, включая (текущие) недостатки в масштабируемости Django.

    • У HP был сайт, построенный с центром Django 1.5: ePrint . Однако, что касается novemer / 2015, весь сайт был перенесен, и эта ссылка является просто перенаправлением. Этот веб-сайт был всемирным сервисом, посещающим подписку на Instant Ink и сопутствующие услуги, предлагаемые HP (*).

  2. «Может ли Django ежедневно заниматься 100 000 пользователей, каждый из которых посещает сайт в течение нескольких часов?»

    Да, см. Выше.

  3. «Может ли такой сайт, как Stack Overflow, запускаться на Django?»

    Мое чувство кишки да, но, как и другие, и Майк Мэлоун упоминает в своем выступлении, дизайн базы данных имеет решающее значение. Сильное доказательство можно найти также на сайте http://www.cnprog.com, если мы сможем найти надежную статистику трафика. Во всяком случае, это не просто то, что произойдет, объединив кучу моделей Django 🙂

Есть, конечно, еще много сайтов и блоггеров, но мне нужно где-то остановиться!


Сообщение в блоге о том, как использовать Django для создания сайта с высоким трафиком, michaelmoore.com описывается как топ-10 000 веб-сайтов . Статистика Quantcast и статистика compete.com .


(*) Автор редактирования, включая такую ​​ссылку, использовался для работы в качестве стороннего разработчика в этом проекте.

Сейчас мы тестируем нагрузку. Мы думаем, что можем поддерживать 240 одновременных запросов (устойчивая скорость 120 ударов в секунду 24×7) без существенного ухудшения производительности сервера. Это будет 432 000 просмотров в час. Время отклика невелик (наши транзакции велики), но с нашей базовой производительностью нет ухудшения по мере увеличения нагрузки.

Мы используем Apache front-end Django и MySQL. ОС – Red Hat Enterprise Linux (RHEL). 64-битный. Мы используем mod_wsgi в режиме демона для Django. Мы не использовали кеш или оптимизацию базы данных, кроме как принимать значения по умолчанию.

Мы все находимся в одной виртуальной машине на 64-разрядной версии Dell с (я думаю) 32 ГБ оперативной памяти.

Поскольку производительность почти одинакова для 20 или 200 одновременных пользователей, нам не нужно тратить огромное количество времени на «настройку». Вместо этого нам просто нужно поддерживать базовую производительность благодаря обычным улучшениям производительности SSL, обычным разработкам и внедрению баз данных (индексирование и т. Д.), Обычным улучшениям производительности брандмауэра и т. Д.

То, что мы измеряем, – это наши тестовые ноутбуки с нагрузкой, которые изо всех сил пытаются преодолеть сумасшедшую рабочую нагрузку из 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

Screencast о том, как развернуть django с масштабированием в виду http://ontwik.com/python/django-deployment-workshop-by-jacob-kaplan-moss/

Вот ссылка на список сайтов с высоким трафиком Django на Quora .

Что такое «самый большой» сайт, который сегодня построен на Django? (Я измеряю размер в основном по пользовательскому трафику)

В США Махало . Мне говорят, что они обрабатывают примерно 10 миллионов уникальных предметов в месяц.

За границей, сеть Globo (сеть новостей, спортивных и развлекательных сайтов в Бразилии); Alexa оценивает их в топ-100 во всем мире (около 80-ти в настоящее время).

Другие известные пользователи Django включают PBS, National Geographic, Discovery, NASA (на самом деле ряд различных подразделений в NASA) и Библиотеку Конгресса.

Может ли Django ежедневно обрабатывать 100 тыс. Пользователей, каждый из которых посещает сайт в течение нескольких часов?

Да, но только если вы написали свое приложение правильно, и если у вас достаточно оборудования. Джанго – не волшебная пуля.

Может ли такой сайт, как StackOverflow, запускаться на Django?

Да (но см. Выше).

Технологически, легко: см. Soclone для одной попытки. Потребители трафика, конкурирующие колышки StackOverflow с менее чем 1 миллионом уникальных в месяц. Я могу назвать как минимум дюжину сайтов Django с большим количеством трафика, чем SO.

Играя адвоката дьявола немного:

Вы должны проверить DjangoCon 2008 Keynote , поставленный Cal Henderson под названием «Почему я ненавижу Django», где он в значительной степени просматривает все, что Django не хватает, что вы можете захотеть сделать на сайте с высоким трафиком. В конце концов, вы должны принять это все с открытым умом, потому что вполне возможно писать приложения Django, которые масштабируются, но я думал, что это хорошая презентация и имеет отношение к вашему вопросу.

Самый большой сайт django, о котором я знаю, – это Washington Post , что, безусловно, указывает на то, что он может хорошо масштабироваться.

Хорошие проектные решения, вероятно, оказывают большее влияние на производительность, чем что-либо другое. Twitter часто упоминается как сайт, который олицетворяет проблемы с производительностью с помощью другой динамической интерпретируемой языковой веб-структуры Ruby on Rails, но инженеры Twitter заявили, что структура не такая уж большая проблема, как некоторые из вариантов дизайна баз данных, которые они сделали раньше на.

Django отлично работает с memcached и предоставляет некоторые классы для управления кешем, в котором вы решите большинство проблем с производительностью. То, что вы доставляете на проводе, в действительности более важно, чем ваш бэкэнд, – использование такого инструмента, как yslow, имеет решающее значение для высокопроизводительного веб-приложения. Вы всегда можете добавить больше оборудования на свой сервер, но вы не можете изменить пропускную способность своих пользователей.

Масштабирование веб-приложений – это не о веб-фреймворках или языках, а о вашей архитектуре. Речь идет о том, как вы обрабатываете кеш браузера, кеш базы данных, как вы используете нестандартных поставщиков персистентности (например, CouchDB ), как настроена ваша база данных и множество других вещей …

Не беспокойтесь …

Я был на конференции EuroDjangoCon на другой неделе, и это было предметом нескольких переговоров – в том числе от основателей того, что было самым большим сайтом на базе Django, Pownce (слайды из одного выступления здесь ). Главное сообщение состоит в том, что вам не о чем беспокоиться Django, но такие вещи, как правильное кэширование, балансировка нагрузки, оптимизация базы данных и т. Д.

В Django на самом деле есть крючки для большинства из этих вещей – кэширование, в частности, сделано очень просто.

Я уверен, что вы ищете более надежный ответ, но наиболее очевидная объективная проверка, о которой я могу думать, заключается в том, что Google заставляет Django использовать его с инфраструктурой App Engine . Если кто-то знает и имеет дело с масштабируемостью на регулярной основе, это Google. Из того, что я читал, наиболее ограничивающим фактором, по-видимому, является база данных, поэтому Google использует свои собственные …

Я думаю, что мы могли бы добавить приложение Apple от года в 2011 году, Instagram , в список, который интенсивно использует django.

Может ли такой сайт, как Stack Overflow, запускаться на Django?

В китайской версии Stack Overflow используется Django:

https://stackoverflow.com/questions/694966/impressed-or-angry-at-http-www-cnprog-com

Сегодня мы используем множество веб-приложений и сайтов для наших нужд. Большинство из них очень полезны. Я покажу вам некоторые из них, используемые python или django.

Washington Post

Сайт Washington Post – чрезвычайно популярный онлайн-источник новостей, который сопровождает их ежедневную газету. Его огромное количество просмотров и трафика можно легко обработать с помощью веб-фреймворка Django. Washington Post - 52.2 million unique visitors (March, 2015)

НАСА

Официальный сайт Национального управления по аэронавтике и исследованию космического пространства – это место, где можно найти новости, фотографии и видеоролики об их текущей космической разведке. Этот сайт Django может легко обрабатывать огромное количество просмотров и трафика. 2 million visitors monthly

Хранитель

The Guardian – британский новостной и медиа-сайт, принадлежащий Guardian Media Group. Он содержит почти все содержание газет The Guardian и The Observer. Эти огромные данные обрабатываются Django. The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)

YouTube

Мы все знаем, что YouTube – это место, где можно загружать видео для кошек и терпеть неудачу. Как один из самых популярных веб-сайтов, он предоставляет нам бесконечные часы видео-развлечений. Язык программирования Python обеспечивает его и функции, которые мы любим.

DropBox

DropBox начал онлайн-документ, в котором хранится революция, которая стала частью повседневной жизни. Теперь мы храним почти все в облаке. Dropbox позволяет нам хранить, синхронизировать и делиться почти чем угодно, используя мощь Python.

Обзорная обезьяна

Survey Monkey – крупнейшая онлайн-опросная компания. Они могут обрабатывать более миллиона ответов каждый день на своем переписанном веб-сайте Python.

Quora

Quora – это номер один в Интернете, чтобы задать вопрос и получить ответы от сообщества людей. На их веб-сайте Python соответствующие результаты отвечают, редактируются и организуются этими членами сообщества.

Bitly

Большая часть кода для услуг по сокращению бита URL и аналитики построены с помощью Python. Их служба может обрабатывать сотни миллионов событий в день.

Reddit

Reddit известен как первая страница Интернета. Это место онлайн, чтобы найти информацию или развлечения, основанные на тысячах разных категорий. Сообщения и ссылки создаются пользователями и продвигаются на первое место по голосам. Многие из возможностей Reddit полагаются на Python для их функциональности.

Hipmunk

Hipmunk – это интернет-сайт для туристов, который сравнивает лучшие туристические сайты, чтобы найти лучшие предложения. Этот инструмент веб-сайта Python позволяет найти самые дешевые отели и авиабилеты для вашего назначения.

Нажмите здесь для получения дополнительной информации: 25 самых популярных сайтов python и django , « Какие-то-известные-сайты-работает-на-Django»

Если вы еще этого не сделали, я рекомендую прочитать раздел по масштабированию в книге Django:

http://www.djangobook.com/en/1.0/chapter20/

Или более новая версия:

http://www.djangobook.com/en/2.0/chapter12/

Да, оно может. Это может быть Django с Python или Ruby on Rails. Он по-прежнему будет масштабироваться.

Существует несколько разных методов. Во-первых, кеширование не масштабируется. У вас может быть несколько серверов приложений, сбалансированных с nginx как фронт в дополнение к аппаратным балансировщикам. Для масштабирования на стороне базы данных вы можете пойти довольно далеко с помощью чтения подчиненного в MySQL / PostgreSQL, если вы переходите на путь RDBMS.

Некоторыми хорошими примерами сайтов с интенсивным трафиком в Django могут быть:

  • Pownce, когда они все еще были там.
  • Дискус (общий менеджер общих комментариев)
  • Все связанные с газетами веб-сайты: Washington Post и другие.

Вы можете чувствовать себя в безопасности.

Вот список некоторых довольно громких вещей, построенных в Django:

  1. Приложение Guardian « Расследовать ваши расходы »

  2. Politifact.com (вот сообщение в блоге, в котором говорится о (положительном) опыте. Сайт выиграл Пулитцера.

  3. Приложение NY Times

  4. Everyblock

  5. Питер Харкинс, один из программистов в WaPo, перечисляет все материалы, которые они создали с Django в своем блоге

  6. Это немного старо, но кто-то из LA Times дал общий обзор того, почему они пошли с Django.

  7. AV-клуб Onion был недавно перенесен из (я думаю, Drupal) в Django.

Я предполагаю, что некоторые из этих сайтов, вероятно, получат более 100 тыс. Хитов в день. Django, безусловно, может делать 100 000 хитов в день и более. Но YMMV получает ваш конкретный сайт там, в зависимости от того, что вы строите.

На уровне Django есть параметры кеширования (например, кеширование запросов и представлений в memcached может творить чудеса) и за его пределами (кеширование вверх по течению, такое как Squid ). Спецификации сервера баз данных также будут фактором (и, как правило, местом для всплесков), и насколько хорошо вы его настроили. Не предполагайте, например, что Django правильно настроит индексы. Не предполагайте, что настройка PostgreSQL или MySQL по умолчанию является правильной.

Кроме того, у вас всегда есть возможность иметь несколько серверов приложений, работающих под управлением Django, если это медленная точка, с программным или аппаратным балансировщиком нагрузки спереди.

Наконец, вы обслуживаете статический контент на том же сервере, что и Django? Вы используете Apache или что-то вроде nginx или lighttpd ? Можете ли вы позволить использовать CDN для статического контента? Это вещи, о которых нужно думать, но все это очень спекулятивно. 100k hits / day – это не единственная переменная: сколько вы хотите потратить? Насколько вы владеете всеми этими компонентами? Сколько времени у вас есть, чтобы собрать все это вместе?

Обратите внимание, что если вы ожидаете 100 тыс. Пользователей в день, которые активны в течение нескольких часов (что означает максимум 20K + одновременных пользователей), вам понадобится МНОГО серверов. SO имеет ~ 15 000 зарегистрированных пользователей, и большинство из них, вероятно, не активны ежедневно. Хотя основная часть трафика поступает от незарегистрированных пользователей, я предполагаю, что очень немногие из них остаются на сайте более чем на пару минут (т. Е. Следуют результатам поиска Google, а затем уходят).

Для этого тома ожидайте не менее 30 серверов … которые по-прежнему являются довольно тяжелыми 1000 одновременными пользователями на сервер.

Другим примером является rasp.yandex.ru, российское транспортное расписание. Его посещаемость удовлетворяет вашим требованиям.

Я использую Django уже более года и очень впечатлен тем, как ему удается сочетать модульность, масштабируемость и скорость разработки. Как и любая технология, она имеет кривую обучения. Однако эта кривая обучения становится намного менее крутой благодаря отличной документации от сообщества Django. Django смог обработать все, что я набросил на него очень хорошо. Похоже, он сможет хорошо масштабироваться в будущем.

BidRodeo Penny Auctions – это умеренно размерный сайт Django. Это очень динамичный веб-сайт и обрабатывает большое количество просмотров страниц в день.

Если у вас есть сайт с каким-то статическим контентом, то размещение фронтального сервера Varnish значительно увеличит вашу производительность. Даже один ящик может легко выплевывать 100 Мбит / с трафика.

Обратите внимание, что с динамическим контентом использование чего-то вроде Varnish становится намного более сложным.

Сторонник разработчика YouTube рассказал о масштабировании Python в PyCon 2012 , что также имеет отношение к масштабированию Django.

YouTube имеет более миллиарда пользователей , а YouTube построен на Python.

Мой опыт работы с Django минимален, но я помню, что в книге «Django» у них есть глава, где они беседуют с людьми, использующими некоторые из более крупных приложений Django. Вот ссылка. Думаю, это могло бы дать некоторые идеи.

В нем говорится, что curse.com является одним из крупнейших приложений Django с 60-90 миллионами просмотров страниц за месяц.

Как указано в High Performance Django Book, введите ссылку здесь и пройдите через этот Cal Henderson

См. Дополнительную информацию, как указано ниже:

Нередко слышно, как люди говорят, что «Django не масштабируется». В зависимости от того, как вы смотрите на это, утверждение либо полностью верно, либо явно ложно. Джанго сам по себе не масштабируется.

То же самое можно сказать о Ruby on Rails, Flask, PHP или любом другом языке, используемом динамическим веб-сайтом, управляемым базой данных.

Однако хорошая новость заключается в том, что Django прекрасно взаимодействует с набором инструментов кэширования и балансировки нагрузки, которые позволят масштабироваться до такого же трафика, как вы можете его бросить.

Вопреки тому, что вы читали в Интернете, он может это сделать без замены основных компонентов, которые часто обозначаются как «слишком медленные», такие как ORM базы данных или слой шаблона.

Disqus обслуживает более 8 миллиардов просмотров страниц в месяц. Это огромные количества.

Эти команды доказали, что Django, безусловно, делает масштаб. Наш опыт здесь в Lincoln Loop поддерживает его.

Мы создали большие сайты Django, способные провести день на домашней странице Reddit, не нарушая пота.

Истории успеха масштабирования Django почти слишком велики, чтобы перечислить на этом этапе.

Он поддерживает Disqus, Instagram и Pinterest. Хотите еще несколько доказательств? Instagram смог выдержать более 30 миллионов пользователей на Django только с тремя инженерами (2 из которых не имели встроенной разработки

Вы можете определенно запустить сайт с высоким трафиком в Django. Проверьте этот pre-Django 1.0, но все еще актуальный пост здесь: http://menendez.com/blog/launching-high-performance-django-site/

Проверьте этот агрегатор микро новостей под названием EveryBlock .

Это полностью написано в Django. На самом деле это люди, которые разработали саму систему Django.

Если вы хотите использовать Open source, то для вас есть много вариантов. Но python лучше всего среди них, у него много библиотек и супер-потрясающее сообщество. Это причины, которые могут изменить ваш разум:

  • Python очень хорош, но это интерпретируемый язык, который делает его медленным. Но многие сервисы ускорителя и кеширования частично устраняют эту проблему.

  • Если вы думаете о быстром развитии, то Ruby on Rails лучше всего среди всех. Основной девиз этого (ROR) – предоставить разработчикам комфортный опыт. Если вы сравниваете Ruby и Python, то они имеют почти одинаковые синтаксисы.

  • Google App Engine – это очень хороший сервис, но он свяжет вас в своем объеме, вы не сможете экспериментировать с новыми вещами. Вместо этого вы можете использовать облако Digital Ocean, которое займет всего лишь 5 долларов за месяц за простейшую каплю. Heroku – еще одна бесплатная услуга, в которой вы можете развернуть свой продукт.

  • Да! Да! То, что вы слышали, абсолютно правильно, но вот некоторые примеры, которые используют другие технологии

    • Rails: Github, Twitter (ранее), Shopify, Airbnb, Slideshare, Heroku и т. Д.
    • PHP: Facebook, Википедия, Flickr, Yahoo, Tumbler, Mailchimp и т. Д.

Заключение – это основа или язык, который не сделает все для вас. Лучшая архитектура, проектирование и стратегия предоставят вам масштабируемый веб-сайт. Instagram – самый большой пример, эта небольшая команда управляет такими огромными данными. Вот один блог о его архитектуре должен прочитать его.

Даже, хотя здесь было много отличных ответов, мне просто хочется указать, что никто не акцентировал внимание.

Это зависит от приложения

Если вы используете приложение для записи, так как вы читаете намного больше данных из БД, чем вы пишете. Тогда масштабирование django должно быть довольно тривиальным, черт возьми, он поставляется с довольно приличным кэшем вывода / просмотра прямо из коробки. Используйте это и скажите, redis, как поставщик кэша, поставьте перед ним балансировщик нагрузки, разверните n-экземпляры и вы сможете иметь дело с ОЧЕНЬ большим количеством трафика.

Теперь, если вам нужно сделать тысячи сложных записей второй? Разная история. Является ли Django плохим выбором? Ну, не обязательно, зависит от того, как вы на самом деле архитектируете свое решение, а также, каковы ваши требования.

Только мои два цента 🙂

Распространение задач равномерно, короткая оптимизация каждого аспекта, включая базы данных, файлы, изображения, CSS и т. Д., А также балансировку нагрузки с несколькими другими ресурсами необходимо, как только ваш сайт / приложение начнет расти. ИЛИ вы делаете еще больше места для его роста. Внедрение новейших технологий, таких как CDN, Cloud, необходимо с огромными сайтами. Просто разработка и настройка приложения не даст вам процентного удовлетворения, другие компоненты также играют важную роль.

Я разрабатываю сайты с высоким трафиком, используя Django для национальной телекомпании в Ирландии. Это хорошо работает для нас. Разработка высокопроизводительного сайта – это не просто выбор структуры. Рамка будет только одной частью системы, которая так же сильна, как слабая связь. Использование последней версии «X» не решит проблемы с производительностью, если проблема связана с медленными запросами базы данных или плохо настроенным сервером или сетью.

Проблема заключается не в том, может ли django масштабироваться или нет.

Правильный способ состоит в том, чтобы понять и узнать, какие шаблоны проектирования сети и инструменты, которые можно использовать для проекта django / symfony / rails, хорошо масштабируются.

Некоторые идеи могут быть следующими:

  • Мультиплексирование.
  • Обратный прокси. Пример: Nginx, лак
  • Сессия Memcache. Пример: Redis
  • Кластеризация вашего проекта и db для балансировки нагрузки и отказоустойчивости: Ex: Docker
  • Используйте стороннюю компанию для хранения активов. Пример: Amazon S3

Надеюсь, что это поможет. Это моя крошечная скала к горе.

Я не думаю, что проблема действительно связана с масштабированием Django.

Я действительно предлагаю вам заглянуть в свою архитектуру, и это поможет вам с вами, масштабируя потребности. Если вы ошибетесь, не стоит говорить о том, насколько хорошо работает Django. Производительность! = Масштаб. У вас может быть система, которая обладает потрясающей производительностью, но не масштабируется и наоборот.

Связана ли ваша база данных приложений? Если это тогда, то и ваши проблемы с масштабом тоже будут. Как вы планируете взаимодействовать с базой данных из Django? Что происходит, когда ваша база данных не может обрабатывать запросы так же быстро, как Django принимает их? Что происходит, когда ваши данные перерастают одну физическую машину. Вам нужно учитывать, как вы планируете справляться с этими обстоятельствами.

Кроме того, что происходит, когда ваш трафик перерастает один сервер приложений? как вы обрабатываете сеансы в этом случае, может быть сложно, чаще всего вам, вероятно, потребуется архитектура без общего доступа. Опять же, это зависит от вашего приложения.

Короче говоря, язык не определяет масштаб, язык отвечает за производительность (опять же, в зависимости от ваших приложений разные языки работают по-разному). Именно ваш дизайн и архитектура делают масштабирование реальностью.

Я надеюсь, что это поможет, будет рад помочь вам, если у вас есть вопросы.