Как сбалансировать (масштабировать) нагрузку простое приложение PHP?

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

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

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

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

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

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


person JerryK    schedule 02.08.2010    source источник


Ответы (3)


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

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

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

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

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

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

person carlsborg    schedule 02.08.2010

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

Моя точка зрения на это такова:

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

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

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

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

person MarkR    schedule 21.08.2010

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

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

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

person Feras    schedule 28.11.2012