Назад | Перейти на главную страницу

Распределение нагрузки из приложения Django

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

Я поговорил с некоторыми техническими директорами, которые знают, о чем они говорят, и мне посоветовали сделать следующее:

Разделите этапы запуска на четырехэтапный процесс

I. Запустите единое структурированное приложение. assets / и db.sqlite3 внутри приложения, все на одном сервере.

II. Переместите базу данных на собственный сервер, используйте CDN (например, aws-s3) для хранения ресурсов /

III. Настроить балансировку нагрузки

IV. Используйте решение NoSQL, а не rdbms.

Так! Главный вопрос, который у меня есть, касается пункта 2:

Нужно ли мне настраивать среду для запуска sqlite3, создания пользователя, а затем предоставления этой аутентификации специально для моего приложения django?

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

tldr; Я профессиональный разработчик-любитель, и я никогда не создавал ничего, что когда-либо предназначалось для более 1000 пользователей, и мне любопытно, как выглядит поток процесса для создания приложения django, которому удается успешно снизить нагрузку на сервер с помощью другого сервера. .

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

Планируется использовать apache для хостинга, вероятно, на экземпляре ec2 ubuntu 14.04 (несколько?).

Спасибо.

Я очень, очень смущен тем списком, который у вас есть.

Сначала он говорит вам использовать sqlite3 на одном сервере. Затем он говорит вам переместить эту базу данных sqlite на другой хост? Затем он говорит вам настроить балансировку нагрузки (на одном веб-сервере?), Затем он говорит вам использовать решение NoSQL, когда нет вообще никаких причин, по которым rdms может быть узким местом по сравнению с тем, что вы здесь описали.

В любом случае, общая настройка проекта, который вы хотите разместить так широко, как этот (и простой способ), заключается в том, чтобы поместить базу данных на отдельный хост (будь то mysql, будь то postgresql, что вам нравится) и развернуть код на номер серверов приложений.

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

Перед этим вы обычно размещаете балансировщик нагрузки и / или обратный HTTP-прокси для разгрузки трафика, который обычно достигает ваших внутренних серверов.

Хорошим решением было бы действительно пойти с Amazon и использовать их Elastic Loadbalancer, чтобы ваша схема выглядела так:

  • 1 экземпляр балансировщика нагрузки.
  • 2 (или более) экземпляра серверов приложений.
  • 1 (или более) экземпляров вашего любимого сервера баз данных.

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