Как масштабировать приложение PHP (серверы, mysql, кэш-память)

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

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

Я ответил один на многие вопросы, но некоторых оставляют.

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


Сначала

в начале Приложение будет иметь только один сервер (короткое время) с DNS, PHP, Mysql, Данными и кэш-памятью.


Второй

Затем я разделю их в два

  1. DNS, Mysql, кэш-память
  2. Данные, PHP

Треть

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

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

  1. Передняя сторона: Подсистема балансировки нагрузки, кэш-память, DNS
  2. Сеть 1: PHP, ДАННЫЕ
  3. Сеть 2: PHP, ДАННЫЕ
  4. Mysql

Это было бы схемой, все сессии PHP сохранены в DB.

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

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

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

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

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

16
задан surfmuggle 8 October 2014 в 12:23
поделиться

4 ответа

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

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

15
ответ дан 30 November 2019 в 21:36
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 21:36
поделиться

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

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

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

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

2
ответ дан 30 November 2019 в 21:36
поделиться

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

  • Разделение серверов на основе концепций (API, логин , мультимедийные файлы, реклама, статические страницы, динамические страницы)
  • Разделение баз данных на основе концепций, которые не требуют СОЕДИНЕНИЯ (логины, долгосрочные отчеты, данные страницы и т. д.)
  • Скомпилируйте / оптимизируйте ваш PHP и другие ресурсы (спрайты, скомпилированный css, zend)
  • Добавить кеширование (интерфейс, серверная часть)
  • Добавить делегирование (циклический перебор и т. д.)

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

8
ответ дан 30 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: