sslion
@sslion

Как выполнять SOAP запросы в нескольких параллельных потоках?

Собственно имеется API одного из интернет-магазинов. Нужно посредством этого API через php SoapClient получить наличие и цену товаров на складах. Дело в том что это API позволяет получить только один товар за один раз, мне же нужно пройтись по >47К+ позиций номенклатуры. Один запрос может работать от 400мс. до 2-3 сек. Понятно что перебор всей номенклатуры займет гигантское время!
Можно ли как-то реализовать перебор этой номенклатуры в нескольких параллельных потоках (хотя бы в десяти).
Список артикулов для перебора хранится базе данных.
Предполагается запуск скрипта на сервере в командной строке.
Дело усугубляется тем, что нужно получать данные из еще двух площадок, один из них также работает на SOAP, другой можно реализовать на cUPL-ах (мультипоточно).
Многопотчность нужна для того чтобы максимально сократить время обновления данных о товарах (почти 200К позиций).
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Давайте оценим время для 1 потока. 47К позиций - это надо полагать 47 тыщ SOAP-requests надо сделать. Берем среднее время 400 ms до 3s это будет допустим 1700 ms.

47000 * 1700 ms = 79900s = 1331min = 22hours.

22 часа на 1-поточную загрузку товаров.

Из личного впечатления. SOAP - это не очень быстрый протокол. Хрен его закешируешь на н-жинкс. И я думаю что если его запускать в 2-4-8 потоков то ситуация может усугубиться. Если время прыгает в диапазоне от 400 мс до нескольких секунд то это значит что нагрузка в базе плавает сильно. И владелец этого SOAP-сервиса будет ой как не в востороге от ваших экспериментов. Вряд-ли он предполагал что кто-то будет делать массовые выгрузки.

Самый лучший вариант - предупредить его письменно об этой задаче и о том что вы собираетесь делать. Возможно он сообразит что дело пахнет DDOS-ом и сам предложит вам другой вариант выгрузки.
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
использовать php расширение parallel. если операция не разовая, то можно попробовать проверять по дате изменения страницы товара в sitemap.xml, чтобы не загружать все подряд.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы