Как масштабировать PHP-приложение (серверы, mysql, memcache) - PullRequest
16 голосов
/ 15 апреля 2010

В настоящее время я создаю веб-сайт для социального проекта в Швейцарии.

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

Я сам ответил на многие вопросы, но некоторые остались.

Я объясняю, что я хочу сделать.


First

в начале, Приложение будет иметь только один сервер (кратковременно) с DNS, PHP, Mysql, Data и memcache.


Второй

Тогда я разделю их на две

  1. DNS, Mysql, memcache
  2. Данные, PHP

Третий

Вот проблема, я не знаю, как именно это сделать, чтобы приложение работало нормально.

Я мог бы сделать:

  1. Фронт: Балансировщик нагрузки, memcache, DNS
  2. Веб 1: PHP, ДАННЫЕ
  3. Веб 2: PHP, ДАННЫЕ
  4. Mysql

Это будет схема, все сеансы PHP хранятся в БД.

НО, как мне синхронизировать данные? мне запустить Rsync, чтобы держать их в курсе. я должен поставить их на отдельный диск (сетевой диск), чтобы быть уверенным? но в этом случае, как я могу сделать в случае загрузки пользователя?

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

или было бы неплохо обратиться непосредственно к веб-сервисам Amazon?

информация Я использую codeigniter как Framework. Я использую Linux в качестве веб-сервера (дистрибутив не выбран сейчас, но должен быть Debian)

Заранее спасибо за ваши ответы.

Ответы [ 4 ]

15 голосов
/ 15 апреля 2010

Согласно Википедии , в Швейцарии насчитывается 4,6 млн. Немецких, 1,5 млн. Французских и 0,5 млн. Итальянских, романских и других языков. Поэтому я подозреваю, что вы обнаружите, что один сервер будет соответствовать вашим потребностям. Угадайте, какой процент населения будет посещать ваш сайт каждый месяц или каждый день, чтобы понять, насколько большой вы можете получить, прежде чем сталкиваться с проблемами масштабирования.

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

8 голосов
/ 18 апреля 2010

Существует несколько распространенных способов масштабирования веб-сервисов в порядке, который, по-видимому, используют такие сайты, как Flickr и Facebook:

  • Разделение серверов на основе концепций (API, логин, медиа-файлы, реклама, статические страницы, динамические страницы)
  • Разделение баз данных на основе концепций, которые не нужно объединять (логины, долгосрочные отчеты, данные страниц и т. Д.)
  • Компилировать / оптимизировать ваш PHP и другие ресурсы (спрайты, скомпилированные CSS, Zend)
  • Добавить кэширование (передний конец, задний конец)
  • Добавить делегирование (круговой прием и т. Д.)

Но, прежде чем масштабировать, измерьте. Множество тестов, подсчитайте свою емкость и не оптимизируйте, прежде чем это потребуется.

2 голосов
/ 18 апреля 2010

Я вижу некоторые сомнительные вещи:

  • У вас есть один сервер SQL, и вы храните сеансы в базе данных на сайте, где вы ожидаете чрезвычайно большой объем. Сколько запросов требуется для создания одной страницы, если кто-то вошел в систему, и каково ожидаемое замедление при использовании репликации MySQL?

  • При использовании кластерной FS все «просто синхронизируется». Вы не получите сборку A на веб-сервере 1, в то время как сборка B на веб-сервере 2 прервется. Если вы действительно ожидаете такого большого трафика, за то время, которое требуется для загрузки изменений, а затем синхронизируйте все узлы, вы просто разозлили тысячу человек.

Я развернул приложения, работающие в кластерах, используя OCFS2 с более чем 40 узлами без проблем, и OCFS2 не совсем «лучшая» доступная кластерная ФС. Проверьте Блеск и рассмотрите возможность хранения сеансов на диске.

0 голосов
/ 15 апреля 2010

Помните, что вы можете монтировать / делиться папками.

Какие данные вы будете синхронизировать?

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

Вероятно, хорошей идеей будет установить SAN или подобное, чтобы ваши данные оставались в одном месте. Несколько копий данных - это боль, с которой приходится иметь дело. Пройдя по этому маршруту, вы также можете поместить туда файлы db.

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