Масштабируемость 101: Как я могу разработать масштабируемое веб-приложение с использованием PHP? - PullRequest
12 голосов
/ 20 февраля 2011

Я создаю веб-приложение и у меня есть пара быстрых вопросов.Из того, что я узнал, не следует беспокоиться о масштабируемости при первоначальной сборке приложения, а начинать беспокоиться только при увеличении трафика.Тем не менее, это мое первое веб-приложение, и я не совсем уверен, стоит ли мне использовать подход, в котором я разрабатываю вещи специальным образом, а затем "исправляю" их.Я читал истории о том, как люди начинают с приложения, которое получает миллионы пользователей в неделю или две.Не то чтобы я столкнулся с такой же ситуацией, но я не могу не задаться вопросом, как эти люди делают это?

В настоящее время я купил учетную запись общего хостинга на Lunarpages, и это заставило меня начать создавать и тестироватьприложение.Однако мне интересно узнать, как создать такое же приложение в масштабируемой форме с использованием облака, например, Amazon EC2.Насколько я понимаю, я вижу пару компонентов:

  • Существует балансировщик нагрузки, который сначала получает запросы, а затем решает, куда направить каждый запрос
  • Этот запрос затем обрабатываетсясерверная реплика, которая затем обрабатывает запрос и обновляет (если требуется) базу данных и отправляет ответ клиенту
  • Если поступает аналогичный запрос, то механизм кэширования, такой как memcached, запускается и возвращает объекты изкеш
  • черный ящик, который обрабатывает репликацию базы данных

В частности, я пытаюсь сделать следующее:

  • Настройка балансировщика нагрузки (моя домашняя работаобнаружил, что HAProxy является одним из таких балансировщиков нагрузки)
  • Настройка репликации для синхронизации баз данных
  • Использование memcached
  • Настройка Apache для работы с несколькими веб-серверами
  • Приложение с разделами для использования Amazon EC2 и Amazon S3 (мое приложение должно бытьна хранение)
  • Наконец, как мне избежать ожогов при использовании сервисов Amazon?Поскольку это всего лишь этап обучения, я, вероятно, могу работать с 2-3 серверами с простым балансировщиком нагрузки и репликацией, но пока не захочу избежать случайной выплаты денег.

Я не могу найтиресурсы по отдельным темам, но я не могу найти то, что начинается с общей картины.Может кто-нибудь, пожалуйста, помогите мне начать?

Ответы [ 2 ]

7 голосов
/ 20 февраля 2011

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

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

По моему опыту, это включает в себя такие вещи, как:

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

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

  • Масштабируемость БД.Если вы используете традиционные серверы БД, вы можете подумать о том, как реализовать масштабируемость на этом уровне.Это может означать кодирование вашего приложения, поэтому вы используете одну строку подключения для чтения, а другую - для записи.Затем вы можете свободно выполнять репликацию с одним главным узлом, который обрабатывает вставки / обновления, каскадно изменяющие изменения, чтобы узлы только для чтения, которые обрабатывают большую часть работы.

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

1 голос
/ 20 февраля 2011

Рассматривали ли вы сначала игру с виртуальными машинами? Вы можете запустить 2-3 ВМ на своем локальном компьютере и настроить их так, как если бы вы работали на реальных серверах, они просто не смогут обрабатывать реальные уровни трафика. Если все, что вам нужно, - это опыт обучения, то это может быть идеальный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...