Подобная задача решается через т.н. брокеры сообщений (
Message broker). Есть несколько возможных вариантов, к примеру выделенные сервера, реализующие протокол AMQP (например
RabbitMQ,
ActiveMQ и другие), стриминговые сервера (к примеру
Kafka), сервисы очередей (
Amazon SQS и подобные), а также другие реализации паттерна
PubSub, к примеру в
Redis.
Идея состоит в том что вы создаёте очередь (или более сложную структуру, здесь в разных реализациях по-разному) в которую с одной стороны публикуются сообщения, а с другой стороны вызываются обработчики, подписанные на те или иные сообщения в очереди.
В вашем сценарии скорее всего будет подразумеваться две очереди:
- Очередь задач на scraping. а которую подписываются множество worker'ов, осуществляющих непосредственный сбор данных
- Очередь с результатами сбора данных, куда worker'ы будут скидывать данные и на которую подписываются обработчики, решающие что же делать с данными дальше
Возможно есть ещё какие-то задачи и реальная схема будет сложнее, но в целом, надеюсь, идея понятна.
Для PHP существуют немало binding'ов к серверам, реализующим message brokering. Не знаю что именно на сервер вы выберете, поэтому навскидку приведу
php-amqplib/php-amqplib для работы с AMQP (в первую очередь с RabbitMQ),
enqueue/amqp-tools (также для AMQP) и
superbalist/php-pubsub для реализации PubSub паттерна, к примеру через Redis.
Вы не указали на чём написан ваш проект, но в целом также можно посмотреть в сторону компонента
Messenger для Symfony, его можно использовать и вне Symfony и он даёт хорошую базу для реализации схем обмена сообщениями.