Как лучше реализовать парсинг и трансляцию большого кол-ва RSS средствами PHP?
Требуется транслировать большое кол-во RSS лент (Около 5к) в несколько социальных сетей.
PHP-скрипт выполняется не более 30 секунд. Запускается по крону.
Одного запуска не хватит для обработки всех лент.
Первое, что пришло в голову:
Запускать скрипт каждую минуту.
В течение доступного времени обрабатывать ленты.
Когда доступное время подходит к концу, запоминать номер последней обработанной ленты.
При след. запуске начинать обработку с запомненного номера.
В таком случае если ленты большие, то обработка каждой будет не быстрая, следовательно, одна лента может парситься с очень большими промежутками по времени.
Ну, например:
ставим сервер очередей
По крону или ещё как ставятся задачи на обход определённых адресов в очередь.
Воркеры разбирают задачи из очереди краулера, стучатся по адресу, разбирают результат.
Или вешаем 2 очереди:
в первую идут задачи краулеру, который работает только с сетью, а полученные документы кладёт во вторую очередь.
Другие воркеры разбирают вторую очередь и обрабатывают ленты.
В этом случае краулер можно сделать на мультикурле, эффективнее получится утилизировать ресурсы, вместо ожидания сети.
Но если у вас проблема всего-лишь с time limit'ом?...
Тогда вам и очереди не особо помогут. Разве по 1му запросу на каждые 30сек запуска. И то сервер может не ответить сразу, или данные будете долго обрабатывать. А это большой % потери данных и оборванных заданий.
А вообще, идеальный вариант состоит из обоих ответов выше. Убрать лимит на кроны и ставить все в очередь.
PHP скрипт выполняется не более 30 секунд. Запускается по крону.
Так у вас периодические задания реализованы как положено через crontab или как очередной костыль, вызываемый запросом к веб-серверу?
Как минимум в Debian/Ubuntu использование PHP интерпретатора (из штатных пакетов) через CLI предполагает конфигурацию, в которой max_execution_time = 0.