@Andreda

Как лучше реализовать параллельное выполнение скриптов в Php?

Добрый день!
Есть такая задача.

Скрипт принимает запрос от пользователя, и нужно параллельно проверить информацию на 30-ти сайтах-поставщиках (число будет расти).
Проанализировать ответ - и отдать пользователю.
И эти 30 запросов необходимо выполнить быстро, параллельно, а не последовательно.

Multi-curl не подходит, т.к. после каждого curl для каждого сайта свои действия, возможно дополнительные curl-запросы, и другие вычисления
По сути это 30 функций, которые надо запустить параллельно, но основное время выполнения занимает ожидание ответа от сайтов, тут еще время ответа увеличивают PROXY.

Какие варианты лучше всего можно использовать в PHP для параллельного запуска?

Чтобы работало быстро и тратило меньше всего ресурсов.

У меня в голове крутятся такие:

1. Реализовать запуском N скриптов, например через shell_exec("php script.php $params")- без ожидания ответа. И таким образом не иметь возможности обрабатывать ответ от каждого скрипта.

2. Делать с помощью pcntl - и тоже не иметь возможности дождаться и обработать ответ.

3. Сделать с помощью библиотеки pthreads - здесь можно запустить сразу 30 функций в 30-ти потоках( каждая функция в своем потоке) и дождаться их выполнения и обработать результаты.
(В данный момент реализован этот вариант, но мне сказали, что это плохой вариант)

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

А также может это стоит реализовать на других языках программирования, и если так, то на каких и с использованием каких инструментов?

Сервер очередей пока тоже не подходит, необходимо на каждый запрос выполнять такую операцию максимально быстро, потому желательно все 30 функций выполнять параллельно.
  • Вопрос задан
  • 1155 просмотров
Пригласить эксперта
Ответы на вопрос 3
@myxasa
shell_exec("php script.php $params")

каждый скрипт должен писать ответ в БД или еще куда нибудь
основной скрипт по крону проверяет - закончена ли работа?
Ответ написан
@synapse_people
pcntl можно подождать несколько процессов пока завершатся, кто сказал, что нельзя?
Ответ написан
@oxidmod
Очереди самый простой и удобный способ.
Можно начать с простой очереди на редисе и при необходимости перейти на целый кластер RabbitMQ / Apache Kafka.
Обработчики также можно скейлить от пачки воркеров на той же машине, где все остальное и до целой фермы отдельных серверов.

Вы получаете практически неограниченную масштабируемость и полную свободу в технологиях: основной веб на пыхе и производительные воркеров на гошечке - нет проблем
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ВЕРТЕКС Санкт-Петербург
от 90 000 ₽
Laptop.ru Москва
от 150 000 до 190 000 ₽
Laptop.ru Санкт-Петербург
от 130 000 до 170 000 ₽