Как масштабировать веб-приложение?

Я прежде всего разработчик веб-приложений, и я не очень разбираюсь в методах масштабирования / масштабирования. Мое приложение написано на Python с использованием Django; довольно стандартная настройка.

В настоящее время я использую Apache 2.2 для своего веб-сервера и MySQL для своего сервера базы данных; оба работают на одном и том же VPS.

До сих пор это был в основном прототип и всего 15-30 одновременно работающих пользователей; поэтому у меня не было проблем, но теперь, так как мы будем добавлять больше пользователей, у нас будут проблемы с производительностью.

Итак, мой вопрос: как мне масштабировать мое веб-приложение? Мой текущий план выглядит следующим образом:

  1. Теперь у меня работает только один vps-сервер, apache + MySQL.
  2. Затем я планирую добавить еще один vps-сервер для запуска только MySQL, поэтому у меня будет один веб-сервер и один сервер БД.
  3. Затем я добавлю memcache на веб-сервер для кэширования данных, чтобы снять нагрузку с MySQL.
  4. Далее еще один веб-сервер для обслуживания всего статического контента.
  5. Далее, VPS-сервер для балансировки нагрузки (nginx/varnish), за которым будут два моих веб-сервера, а затем db-сервер.

Похоже ли это на работоспособную стратегию? Пожалуйста, ведите меня сюда.

3 ответа

Вы знаете, где находится ваше первое узкое место? Если нет, то как вы изложили порядок действий?

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

Перемещение БД на другой физический диск должно помочь вам и станет вашим первым делом. Например, в зависимости от систем, которые вы используете, не может быть никакой разницы или большой разницы между использованием второго диска на текущем хосте или перемещением на полностью отдельный сервер. Вы работаете на VPS, если вы привязаны к дисковому вводу / выводу, переход на второй VPS, вероятно, не сильно поможет, если он использует то же хранилище (тот же диск или тот же SAN или что-то еще) - но этот последний проблема, которую должен решить ваш провайдер VPS.

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

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

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

Вот еще один взгляд на инфраструктуру для вашего приложения Django.

Другие вопросы по тегам