Масштабирование веб-сайта LAMP, размещенного на EC2

Масштабирование веб-сайта LAMP, размещенного на EC2

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

Мой сайт основан на LAMP, но также имеет сервер Red5, который позволяет пользователям записывать сообщения, а также использовать их для воспроизведения.

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

Экземпляр 1: На этом экземпляре я запущу базу данных MySql.

Экземпляр 2: На этом экземпляре я запущу сервер red5.

Instance-3 & Instance-4 Эти 2 экземпляра будут использоваться для развертывания веб-сайта и будут иметь Apache, работающий на них. Они будут взаимодействовать с сервером mysql на Instance-1 и сервером red5 на Instance-2, используя внутренний IP-адрес. По мере необходимости я запущу еще один экземпляр того же

EBS - у меня будет EBS, скажем, на 50 Гб, где будут храниться все данные MySQL. Также red5 будет использовать этот EBS для хранения видеосообщений

Балансировщик нагрузки — используйте балансировщик нагрузки, предоставленный Amazon, для балансировки нагрузки Instance-3 и Instance-4.

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

Я знаю, что Amazon также предоставляет функции автоматического масштабирования и масштабирования MySQL, но я не хочу сейчас вдаваться в подробности.

Мы ценим ваш отзыв. Спасибо.

решение1

На эту тему есть целая серия статей @http://highscalability.com

Я не использовал AWS, но у меня есть опыт запуска виртуальных экземпляров в центре обработки данных с использованием виртуальных экземпляров Rackspace и AppEngine.

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

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

Итак, вы можете начать со всего, запущенного на одном экземпляре. Затем вы начинаете получать трафик, и замечаете, что база данных съедает ваш процессор. Поэтому вы перемещаете базу данных на другой экземпляр, и все отлично. Пока трафик не начинает увеличиваться... и вы замечаете, что ваш front-end не справляется с трафиком. Поэтому вы запускаете еще пару экземпляров, балансируете их нагрузку, и какое-то время вы счастливы, и масштабируетесь, может быть, до дюжины веб-серверов... Но затем вы получаете еще трафик, и хотя front-end справляется, теперь ваша машина базы данных начинает тормозить. Поэтому вы реплицируете свою базу данных на master и несколько slave-серверов, и все отлично... и так далее, и тому подобное.

решение2

Некоторое время назад я работал над Amazone EC2/EBS и т. д., когда они только были запущены, и успешно перенес один из крупных сайтов с физических хостов в их среду.

Я задокументировал часть своего опыта в своем блоге, например: http://linuxadminzone.com/how-to-install-setup-and-config-haproxy-loadbalancer-for-content-switching/есть еще посты, но я не могу вставить ссылку сюда. Надеюсь, это вам поможет.

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