Как сбалансировать (масштабировать) простое PHP-приложение? - PullRequest
1 голос
/ 02 августа 2010

Я постоянно читаю в Интернете, как важно правильно проектировать мои PHP-приложения, чтобы они могли масштабироваться.

Я создал простую / маленькую CMS, написанную на PHP (подумайте о Wordpress, но ваааайпроще).

У меня, по сути, есть такие URL-адреса: http://example.com/?page_id=X, где X - это id в моей базе данных MySQL, в которой есть содержимое страницы.

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

Хотелось бы что-то вроде NGINX в качестве настройки входной двери для маршрутизации трафика на несколько узлов, на которых мой код выполняетсяобработать example.com/?page_id=X достаточно, чтобы «l oad balance » моего сайта?

Очевидно, что MySQL не сбалансирован по нагрузке в этой ситуации, хотя для простоты - это делаетчто выходит за рамки этого вопроса.

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Это некоторые хорошо известные методы для масштабирования такого приложения.

  • Уменьшить попадания в БД Чаще всего узким местом будет ваша БД, поэтому кэшируйте последние страницы, чтобы уменьшить активность БД, например, в memcached.

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

  • Управление сессиями php Размещение ngnx перед сайтом php не будет работать, если вы используете сессии. У php балансировки нагрузки есть проблемы, поскольку сеансы сохраняются в локальном хранилище. Поэтому вам нужно явно управлять сессиями. Традиционное решение - использовать memcached для хранения и поиска файлов cookie.

  • Не оптимизируйте преждевременно. Сосредоточьтесь на том, чтобы вывести свое приложение так, чтобы следующее количество нынешних пользователей получило оптимальное впечатление.

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

2 голосов
/ 22 августа 2010

Нет, совсем не важно масштабировать ваше приложение, если вам это не нужно.

Мой взгляд на это:

  1. Заставь это работать
  2. Убедитесь, что он работает правильно - тестируемость, надежность
  3. Сделайте так, чтобы он работал достаточно эффективно, чтобы быть экономически эффективным для запуска

Тогда, если вам нужно так много трафика, что ваша система не может с ним справиться, и вы уже выбросили все оборудование, которое (разумные) деньги могут купить за него, тогда вам нужно масштабировать. Не раньше.

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

На многих сайтах мало записей, даже если они действительно заняты.

0 голосов
/ 28 ноября 2012

Правильный подход заключается в использовании какого-либо балансировщика нагрузки, такого как:

http://www.softwareprojects.com/resources/programming/t-how-to-install-and-configure-haproxy-as-an-http-loa-1752.html

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

...