балансировка нагрузки в php - PullRequest
1 голос
/ 29 октября 2010

У меня запущен веб-сервис, написанный на PHP-MYSQL.Сценарий включает получение данных с других веб-сайтов, таких как Википедия, Google и т. Д. Среднее время выполнения сценария составляет 5 секунд (в настоящее время выполняется на 1 сервере).Теперь меня попросили масштабировать систему для обработки 60 запросов / сек.Какой из подходов я должен следовать.-Распределение функций между серверами (я создаю 1 сервер для извлечения данных из Википедии, другой для извлечения данных из Google и т. Д. И главный сервер.) -Распределенная нагрузка между серверами (я создаю один главный сервер, который полностью разбивает запрос на его дочерние серверы скаждый дочерний процесс обрабатывает один полный запрос. А как насчет совместного использования базы данных MYSQL между дочерними серверами?)

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Ваш скрипт не является сервером он действует как клиент, когда отправляет запросы на другие сайты.В остальное время он является просто компонентом вашего сервера.

Да, одновременное выполнение нескольких клиентов (экземпляров сценария - вам не нужно больше оборудования) будет намного быстрее, чем последовательное выполнение, однако есливам нужно извлекать данные синхронно с входящим запросом в ваш скрипт, тогда будет сложно координировать результаты отдельных экземпляров - вместо этого вы можете взглянуть на функции curl_multi *, которые позволяют вам группировать несколько запросов и запускать их одновременноиз одного потока PHP.

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

1 голос
/ 29 октября 2010

Я не уверен, что вы действительно получите, разделив функциональность между серверами (вариант # 1). Вы можете использовать Apache mod_proxy_balancer для выполнения вашего второго варианта. У него есть несколько различных алгоритмов для определения того, какой сервер с наибольшей вероятностью сможет обработать запрос.

http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html

Apache / PHP должен иметь возможность обрабатывать несколько запросов одновременно. Вам просто нужно убедиться, что у вас достаточно памяти и правильно настроить Apache.

...