Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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