Как на php ставить задачи в очередь например при парсинге сайта?

Добрый день!
Есть ли какие-то простые и понятные методы ставить задачи в очередь?

Например есть 5000 ссылок (из которых 20% одного сайта, 40% другого и тд), с которых нужно ежедневно парсить цену.
Есть панель управления в которой выведены все товары и можно на каждый товар нажать чтобы его обновило сразу.
Каждый товар может иметь более 4 ссылок.

Проект написан, кроме парсинга. Хотелось бы изначально сделать все правильно и с минимальной нагрузкой для сервера. Не хочется много говнокодить и писать скрипт который запускается и проходить сразу по всем ссылкам и все парсит и не понятно что-то смог, что-то нет. Хаос вообщем )

В задумках, чтобы существовала очередь некая, которая постоянно 24/7 работала и обновляла все. Чтобы в базе было куча ссылок и они поочереди обновлялись.

Может кто объяснит, как работают сервисы мониторинга цен конкурентов? Буду признателен для саморазвития. У них база из сотен клиентов и постоянно их парсер мониторит кучу сайтов.
Если вдруг еще из прайс листа нужно обновить цены, чтобы тоже в очередь задача ставилась)
  • Вопрос задан
  • 350 просмотров
Решения вопроса 1
@Flying
Подобная задача решается через т.н. брокеры сообщений (Message broker). Есть несколько возможных вариантов, к примеру выделенные сервера, реализующие протокол AMQP (например RabbitMQ, ActiveMQ и другие), стриминговые сервера (к примеру Kafka), сервисы очередей (Amazon SQS и подобные), а также другие реализации паттерна PubSub, к примеру в Redis.

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

В вашем сценарии скорее всего будет подразумеваться две очереди:
  1. Очередь задач на scraping. а которую подписываются множество worker'ов, осуществляющих непосредственный сбор данных
  2. Очередь с результатами сбора данных, куда worker'ы будут скидывать данные и на которую подписываются обработчики, решающие что же делать с данными дальше

Возможно есть ещё какие-то задачи и реальная схема будет сложнее, но в целом, надеюсь, идея понятна.

Для PHP существуют немало binding'ов к серверам, реализующим message brokering. Не знаю что именно на сервер вы выберете, поэтому навскидку приведу php-amqplib/php-amqplib для работы с AMQP (в первую очередь с RabbitMQ), enqueue/amqp-tools (также для AMQP) и superbalist/php-pubsub для реализации PubSub паттерна, к примеру через Redis.

Вы не указали на чём написан ваш проект, но в целом также можно посмотреть в сторону компонента Messenger для Symfony, его можно использовать и вне Symfony и он даёт хорошую базу для реализации схем обмена сообщениями.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@2vtlk
Слишком сложные для новичка варианты вам предложили. Откройте почитайте документацию любого вменяемого фреймворка, например
https://laravel.com/docs/5.8/queues#creating-jobs
Там все с примерами. А то сейчас потратите сотню часов на изучение новых непонятных технологий.
Ответ написан
Ваш ответ на вопрос

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

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