Django для социальных сетей

Я знаю, что это относительно широкий вопрос, но является ли Django достаточно надежным, чтобы построить социальную сеть? Меня интересует в основном производительность / скорость. Например, для сайта с небольшой пользовательской базой (<10000 пользователей) можно создать сайт с поддержкой Django, который будет работать со скоростью, аналогичной Facebook?

Каковы его потенциальные недостатки и что нужно сосредоточить, чтобы сделать это как можно быстрее?

  • Преобразование часового пояса Python
  • Что более эффективно .objects.filter (). Exists () или get () и попытка
  • Какова цель коллекций. ChainMap?
  • Удаление кэша pip?
  • pip терпит неудачу с AttributeError: объект 'module' не имеет атрибутов 'wraps'
  • Установка оси в matplotlib
  • Как исправить ошибку кодирования при преобразовании списка в формат csv?
  • Панды: Бар-Участок с двумя стержнями и двумя у-оси
  • 7 Solutions collect form web for “Django для социальных сетей”

    «Каковы его потенциальные недостатки и какие вещи нужно сосредоточить, чтобы сделать это как можно быстрее?»

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

    Это особенно актуально, если вы используете модель, которая связана с общим отношением .

    Предположим, вы используете поток активности django для создания списка недавних событий (похожих на ленту новостей Facebook). django-activity-stream в основном создает список общих отношений. Для каждого из этих общих отношений вам нужно будет запустить запрос, чтобы получить информацию об этом объекте. И поскольку он является общим (т. Е. Вы не пишете пользовательский запрос для каждого типа объекта), если у этого объекта есть свои отношения, которые вы хотите вывести, вы можете посмотреть что-то вроде 40-100 запросов для фида активности с только 20-30 деталями.

    Выполнение 40-100 запросов для одного запроса не является оптимальным поведением.

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

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

    Кроме того, вы можете изучить такие вещи, как кеширование , чтобы ускорить ответы и предотвратить загрузку сервера.

    Этот вопрос был задан в 2011 году, и с тех пор Django прошел долгий путь. Я ранее строил социальную сеть с 2 миллионами пользователей на Django и нашел, что процесс был довольно плавным. Часть инфраструктуры getstream.io также работает на Django, и мы очень довольны этим. Вот несколько советов, как получить максимальную отдачу от установки Django. Это было не совсем ясно из вопроса, но я начну с совершенно неоптимизированной установки Django.

    Статические файлы и CDN

    Начните с размещения своих статических файлов на S3 и привяжите к нему Cloudfront CDN. Хостинг статических файлов из вашего экземпляра Django – ужасная идея, пожалуйста, не делайте этого.

    База данных и ORM: выберите соответствующие

    Вторая наиболее распространенная ошибка – это не оптимизация использования ORM. Вы захотите ознакомиться с документацией относительно выбора и применить ее по мере необходимости. Большинство страниц на вашем сайте должны принимать только 2-3 запроса, а не N запросов, как вы обычно видите, правильно ли вы используете правильный выбор: https://docs.djangoproject.com/en/1.11/ref/models/ querysets /

    База данных: PGBouncer

    Создание нового подключения к вашей базе данных postgres – довольно тяжелая операция. Вы хотите запустить PGBouncer на localhost, чтобы убедиться, что у вас нет ненужных накладных расходов при создании соединений с базой данных. Это было более актуально с более ранними версиями Django, но в целом все еще хорошая идея.

    Базовый мониторинг и отладка

    Затем вы захотите провести базовый мониторинг и отладить работу. Панель инструментов отладки django – ваш первый друг: https://github.com/jazzband/django-debug-toolbar

    После этого вы захотите взглянуть на такие инструменты, как NewRelic, Datadog, Sentry и StatsD / Graphite, чтобы получить больше информации.

    Отдельные проблемы

    Еще один первый шаг – отделить проблемы. Вы захотите запустить свою базу данных на своем собственном сервере, на своем сервере поиска на своем собственном сервере, в Интернете на своих серверах и т. Д. Если вы запустите все на одной машине, вам сложно понять, что заставляет ваше приложение ломаться. Серверы дешевы, расщепляются.

    Балансировщик нагрузки

    Если вы никогда не использовали балансировку нагрузки раньше, начните здесь: https://aws.amazon.com/elasticloadbalancing/

    Используйте правильные инструменты

    Если вы используете облака тегов, поиск или поиск тегов используют для этого специальный инструмент, например Elastic.

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

    Сельдерей и кролик

    Используйте очередь задач, чтобы делать все, что не нужно делать прямо сейчас в фоновом режиме. Наиболее широко используемая очередь задач – Celery: http://www.celeryproject.org/

    Денормализовать все

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

    Каналы новостей и потоки активности

    Если вы создаете каналы, посмотрите эту службу для создания новостных лент и потоков активности или с открытым исходным кодом Stream-Framework

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

    Теперь, когда мы рассмотрели основы, рассмотрим несколько дополнительных советов.

    CDN и двухступенчатая загрузка

    Вы уже используете Cloudfront для своих статических файлов. В качестве следующего шага вам также понадобится использовать Cloudfront перед вашим веб-трафиком. Это позволяет кэшировать определенные страницы на CDN и уменьшать нагрузку на ваши серверы.

    Вы даже можете кэшировать страницы для входа в систему на CDN. Просто используйте Javascript для загрузки во всех настройках страницы и конкретных сведений о пользователе после того, как страница будет отправлена ​​из CDN.

    База данных: PGBadger

    Такие инструменты, как PGBadger, дают вам представление о том, что делает ваша база данных. Вы захотите запускать ежедневные отчеты по части ваших данных журнала.

    База данных: индексы

    Вы захотите начать чтение индексов базы данных. Большинство ранних проблем масштабирования можно устранить, применив правильный индекс и немного оптимизировав базу данных. Если вы правильно указали свои индексы, вы будете лучше, чем большинство людей. Существует гораздо больше возможностей для оптимизации базы данных, и эти книги для 2-го квадранта являются удивительными. https://www.2ndquadrant.com/en/books/

    База данных: настройка

    Если вы не используете RDS, вы хотите запустить быструю проверку PGTune в своей базе данных. По умолчанию конфигурация postgres довольно вялая, PGTune сообщает вам правильные настройки для использования: https://github.com/gregs1104/pgtune

    Загрузите все

    Масштабирование базы данных – это боль. В конце концов вы столкнетесь с наличием нескольких подчиненных баз данных, обработкой осколков и разбиения на разделы и т. Д. Масштабирование вашей базы данных требует много времени, и ваш лучший способ избежать траты времени на это – кеширование. Redis – это ваш кэш в настоящее время, но memcached также является достойным вариантом. В принципе, вы захотите все кешировать. На странице показан список сообщений: Чтение из Redis, поиск профилей пользователей? Читайте у Редиса. Вы хотите как можно меньше использовать свою базу данных и накладывать большую часть нагрузки на свой уровень кэша, так как чрезвычайно просто масштабировать свой уровень кеша

    Смещения

    Postgres не любит большие смещения. Используйте фильтрацию идентификаторов, когда вы разбиваете страницы на большие результирующие наборы.

    Тупики

    С большим количеством трафика вы в конечном итоге получите взаимоблокировки. Это происходит, когда несколько транзакций в postgress пытаются заблокировать часть информации, а A ждет B, а B ожидает, что C и C ожидают A. Очевидным решением является использование небольших транзакций. Это уменьшает вероятность возникновения взаимоблокировок. Затем вы захотите выпустить обновления для самых популярных данных. IE. Вместо того, чтобы обновлять подсчеты, когда кому-то нравится сообщение, вам нужно сохранить список, например, изменения и синхронизацию, которые будут подсчитываться каждые 5 минут или около того.

    Вот некоторые из основных советов, повеселимся с быстро растущими социальными сетями 🙂

    Pinterest & Instagram использует django, я уверен, что он масштабируемый, для большинства загруженных частей, таких как фид активности, вы можете использовать хранилище в памяти, такое как Redis.

    сайты с высокой нагрузкой на django

    Disqus http://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus

    Pinterest http://www.slideshare.net/eonarts/mysql-meetup-july2012scalingpinterest

    Instagram http://instagram-engineering.tumblr.com/

    С головы …

    Pinax имеет профиль для сайта социальной сети.

    Convore и Disqus использует Django для некоторых частей своих веб-сайтов.

    О масштабируемости Django – шкала Django?

    Изменить: нашел это, пока я искал что-то другое.

    PyCon 2011: Django: Ловушки, с которыми я столкнулся, и как их избежать

    Представлено Люком Снерингером

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

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

    Главным узким местом будет то, как вы разрабатываете свои модели. По моему опыту, создание глубоких вложенных внешних ссылок и многих подключений (многие отношения со многими) замедляется, когда вы выполняете сложные запросы. Вы должны попробовать список полей для таких случаев. Вы также можете исследовать пару ключей / значений, которые Google использует на своей большой таблице в appengine , она масштабирует больше, чем базы данных отношений.

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

    Этот вопрос говорит о масштабировании с Django. Это может повысить вашу уверенность в попытке создать потенциально большой сайт.

    Это не проблема только на Django или python, это облако и разработка программного обеспечения. Один сервер может быть в порядке для 10 000 пользователей, учитывая, что они не параллельны, а также местоположение, являются ли эти пользователи в одном городе? страна?

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

    Если вы все еще беспокоитесь, если Python является ответом, тогда вы можете исследовать Ruby on Rails и asp .Net, даже perl, php, такие вещи. Для меня Python определенно является ответом.

    Python - лучший язык программирования в мире.