Как масштабировать серверы приложений php по горизонтали? - PullRequest
2 голосов
/ 15 апреля 2010

Я использую lighttpd в качестве веб-сервера для сервера приложений php.В среднемнагрузка на этот сервер около 2-3.База данных MySQL отделена от другого сервера (нагрузка ~ 0,4).Как я могу масштабировать сервер приложений php?

Спасибо.

1 Ответ

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

В нескольких словах, решение, вообще говоря, заключается в следующем:

  • Есть несколько серверов PHP
  • Иметь другой сервер балансировки нагрузки перед
    • Если у вас есть 3 PHP-сервера, то этот балансировщик нагрузки будет отправлять 33% запросов, которые он получает на каждом PHP-сервере.

Сервер балансировки нагрузки может быть специализированным оборудованием; или обратный прокси-сервер, используя Apache (см., например, mod_proxy_balancer) , nginx (см., например, Балансировка нагрузки с помощью Nginx ) , лак, ...


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

Например, если пользователь случайно сбалансирован на сервере 1 для одной страницы и на сервере 2 для другой страницы, вы не можете использовать файловые сеансы: сеанс будет создан на сервере 1, но не будет найден на сервере 2, позже.
В этом конкретном случае вам придется использовать другой механизм для хранения сеансов - хранить их в базе данных или, например, в memcached.

То же самое с изображениями (загруженные пользователями, например) : вам придется либо:

  • Синхронизируйте их между серверами
  • Или используйте какой-нибудь сетевой диск


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

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

Объяснение, приведенное здесь, для одного сервера, но сделать то же самое на нескольких серверах вы можете:

  • Загрузить архив на каждый из ваших серверов
  • Извлеките его
  • И почти в одно и то же время переключите символическую ссылку на все серверы.
    • В худшем случае, у вас будет 2 или 3 секунды задержки между каждым сервером, что означает 10 секунд, если у вас есть 5 серверов? Это, вероятно, не большая проблема: -)

(я сделал это с 7 серверами для одного приложения, и у меня никогда не было проблем)

...