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

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

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

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

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

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

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

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

решение1

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

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

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

решение2

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

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

решение3

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

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

Связанный контент