Laravel Ремесленная команда многопоточности? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть команда, которая очищает примерно 300 КБ веб-страниц, и ее запуск занимает целую вечность, так как это много веб-сайтов и веб-сайт ограничен с того места, где я запускаю сервер. Таким образом, поскольку процесс веб-скребка является

POST Website > Scrape > Collect into Array > Write to DB

, все другие шаги, кроме POST, задерживаются, поскольку даже первый шаг занимает целую вечность. Поэтому я хочу запустить несколько рабочих одновременно; Опции, которые я рассматриваю, - AsyncOperation и работники очереди из Laravel, но я не совсем уверен, как бы я реализовал любой из них.

1 Ответ

1 голос
/ 12 февраля 2020

Скорее всего, вы хотите использовать систему очереди / работника, которая подробно описана здесь: https://laravel.com/docs/6.x/queues

Одна из возможных настроек включает Supervisor (Linux монитор процесса ), который обеспечивает выполнение команды php artisan queue:work в фоновом режиме и перезапускается при возникновении ошибки.

В конфигурации супервизора вы можете определить, что вы хотите 4 экземпляра этого запуска, используя numprocs=4 в файле /etc/supervisor/conf.d/laravel-worker.conf.

Basi c объяснение очереди

Так что в основном все зависит от очереди, которая для Laravel может быть Redis (я могу рекомендовать это ), Beanstalkd или обычное database table, называемое «заданиями» (последнее может быть не лучшим решением для производственных сред), или любая другая выбранная вами реализация.

Скажите, если у вас работает 4 рабочих, один из запущенных процессов queue:work подберет и зарезервирует задание, как только оно станет доступным в вашей очереди. Таким образом, несколько заданий в очереди могут быть зарезервированы разными работниками.

Обратите внимание, что несколько процессов выполняются параллельно, что означает, что если вы поставите в очередь sh 3 заданий, вы не сможете предположить, что они будут обработаны. в порядке 1-2-3. Они начинаются в этом порядке, но они могут не заканчиваться sh в этом порядке. Поэтому вы должны помнить об этом при выполнении любых операций чтения или записи, таких как запросы к базе данных. В зависимости от ваших потребностей, вы можете установить количество процессов на 1, чтобы обеспечить правильный порядок выполнения, но это может значительно ограничить вашу пропускную способность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...