Как оптимизировать сервер под 1000 запросов каждую минуту?
Здравствуйте. Каждую минуту крон запускает один скрипт, который через многопоточность cURL вызывает порядка 1000 скриптов (точнее скрипт один, айдишники разные). В среднем обработка одного запроса занимает от 5 до 30 секунд. Как бы не повышал тариф - не справляется с большим количеством запросов. Приходится использовать около 4х VPS, что довольно таки затрудняет. Подскажите, как оптимизировать? Скрипты на PHP.
Запуск скрипта относительно трудоемкая штука. Попробуйте передавать в скрипты id-шники не по одному, а пачками, а в скрипте обрабатывать их в цикле.
Но тут надо смотреть по логике, что именно делает скрипт и как можно оптимизировать его логику работы. Например кешировать рещультаты выборки из бд. Записывать результаты один раз в конце запроса, а не по одному (если это возможно). Какая версия PHP стоит, включен ли кеш байт кода?
Артём: php.net/manual/en/book.opcache.php Это расширение кеширует байткод вашего приложения и при повтороном запуске интерпретация не требуется. Начиная с верчии 5.5 поставляется по умолчанию.
Если крон и скрипт выполняются на одном сервер попробуйте запускать напрямую, а не через сеть, тогда можно будет вообще отказаться от nginx.
Артём: Ну так оптимизируте. Самые простые варианты я вам описал. Зпускаете скрипт под профлировщиком. Смотрите, где он тратит больше всего времени и думате, как можно оптимизировать этот кусок кода. И так по кругу, пока не добьетесь удовлетворительных результатов.
В подавляющем большинстве случаем узкое место - это работа с сетьи и базой данных. Сократите количество обращений к бд до минимума (кеширование, отдоженая запись, оптимизация запросов) и получите большой прирост в скорости.
Артём: Мне лично ничего, я не PHP разработчик, но если вы желаете получить вменяемый ответ тут, то придётся выкладывать скипты на показ ибо ванговать никто не будет или в результате модеры потрут вопрос за тонну непонятных ответов.