Параллельное вычисление на PHP

DmitriyS

Новичок
Требуется выполнять большое число запросов к внешним API для получение некоторых данных. Требуется выполнять порядка 26000 запросов и это количество может быстро рости. Обрабатывать такое большое число запросов в один поток нереально. Возникает вопрос, каким образом можно организовать обработку такого большого числа запросов, то есть как реализовать распараллеливание для данной задачи? какие готовые решения уже имеются?
 

WMix

герр M:)ller
Партнер клуба
запусти скрипт X раз с различным limit
 

WMix

герр M:)ller
Партнер клуба
Как вариант, но если я запущу 1000 скриптов или еще больше то сервер в один прекрасный момент загнется. Ну а вообще это не решение.
а если это будут параллельные думаешь при твоих цифрах не загнется?
(если это не форк, то) это тотже exec...
на 8 процессорах работало ~ 60 не мешало жить
 

fixxxer

К.О.
Партнер клуба
если ожидание ответа от апи заметно превышает cpu time, нужный на 1 запрос - curl_multi_exec
если нет - fork
 

WMix

герр M:)ller
Партнер клуба
fixxxer
а вот fork это параллельно или это больше thread?
 

DmitriyS

Новичок
а если это будут параллельные думаешь при твоих цифрах не загнется? - не загнется, если это будет возможна масштабируемый
(если это не форк, то) это тотже exec...
на 8 процессорах работало ~ 60 не мешало жить
-
Для того, чтобы запустить даже 300 процессов, не требуется 8 процессоров, достаточно даже двух.
 

DmitriyS

Новичок
если ожидание ответа от апи заметно превышает cpu time, нужный на 1 запрос - curl_multi_exec
если нет - fork
curl_multi_exec - опять же может просто на просто повесить Apache количеством соединений. Время ответа может быть разное и оно
колеблется от 1 секунды до 20-30 секунд.

если нет - fork - уже реализовал решение на System_Daemon причем с динамическим изменением количеств активных thread. Однако это не решает полностью
проблемы, так как в ближайшем будущем будет больше запросов и создавать еще больше тредов не будет возможности в рамках одного сервера и поэтому
как раз я и интересуюсь масштабируемостью и готовыми решениями, если таковые имеются вообще.
 

WMix

герр M:)ller
Партнер клуба
io хватит думаешь на 1000 параллельных?
 

DmitriyS

Новичок
io хватит думаешь на 1000 параллельных?
Я же вроде в предыдущих постах спрашивал про масштабируемость? Меня интересует есть ли решение позволяющее
выполнять распараллеливание на n серверах если того требует нагрузка. Динамическое распараллеливание в рамках одного сервера
уже реализовано и уже успешно работает - это порядка 500-600 параллельных задач. Однако проблема не загарами, потому как
нагрузка постоянно растет и надо выполнять все больше и больше внешних запросов.
 

WMix

герр M:)ller
Партнер клуба
rabit это стек... german это тотже System_Daemon... у тебя процессор простаивает или сеть не сильно загружена?
 

WMix

герр M:)ller
Партнер клуба
альтернатива рабиту это activemq.. делить на много систем, ты хочешь через кью задачи расскидывать, или как.. чем тебе не нравится настроить на каждом server по system_daemon?
 

WMix

герр M:)ller
Партнер клуба
я отказался если что от rabita и activemq в пользу базы данных и zend_queue... топики мне не нужны... и яву ставить не надо... все стало простенько... но если чесно вдумавшись в сказанное, спрашиваю себя, что же ты ожидаешь услышать...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если внешние сервисы подконтрольны, я бы посмотрел бизнес-логику и поискал возможность упаковывать запросы в пакеты
я так делаю в своем API чтобы убрать latency на множестве запросов к RPC из одного скрипт
 
Сверху