Конфигурация супервизора для Laravel

Я использую Supervisord, чтобы поддерживать работу моей очереди приложений на основе Laravel. И мне интересно, верна ли приведенная ниже конфигурация.

В документах Laravel, например, numprocs имеет значение 8, что означает, что Supervisord будет запускать очередь: работа 8 раз, и почему это хорошо?

Кроме того, должен ли я использовать --daemon в команде queue:work?

[program:app-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /home/app/public_html/app/artisan queue:work --daemon --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
startsecs=0
stopwaitsecs=60
redirect_stderr=true
stdout_logfile=/home/app/public_html/app/storage/logs/queue-out.log

person Dewan159    schedule 03.01.2020    source источник
comment
RE: --daemon, документы говорят: Программы, предназначенные для запуска под управлением супервизора, не должны демонизировать себя . Вместо этого они должны работать на переднем плане. Они не должны отсоединяться от терминала, с которого они запущены.   -  person Don't Panic    schedule 07.06.2021


Ответы (1)


numprocs создаст 8 процессов, которые затем будут опрашивать очередь каждые 3 секунды. Когда установлено daemon, эти процессы не будут перезапускаться, пока не будет указано, какой из них имеет как преимущества с точки зрения нагрузки на сервер, так и недостатки в виде некоторых потенциальных пограничных случаев при обновлении базы кода.

Наличие 8 процессов означает, что вы потенциально в 8 раз увеличиваете пропускную способность при выполнении заданий.


Пример:

Существует множество сценариев, в которых выгодно параллельное выполнение нескольких процессов.

Например, вы обрабатываете 1000 пользователей и хотите проверить, сколько комментариев оставил каждый из них за последний месяц. Скажем, для обработки каждой проверки требуется минута (экстремально, но это лучше), для завершения потребуется 1000 минут, если вы будете запускать последовательно, перебирая массив или коллекцию из 1000 пользователей. Это более 16 часов!

Если вы поставили их в очередь как задания и установили numprocs на 16, то вы закончите всего за час!

person Spholt    schedule 03.01.2020
comment
Итак, как я понимаю, неиспользование --daemon увеличит нагрузку на сервер, верно? Я могу использовать его, но мне нужно queue:restart каждый раз, когда код меняется. - person Dewan159; 03.01.2020
comment
Что касается numprocs. Наличие 8 процессов означает, что вы потенциально в 8 раз увеличиваете пропускную способность при выполнении заданий. Я до сих пор не очень понимаю, хорошо ли это (или нет) и почему! Разве одного процесса недостаточно для обработки заданий в очереди одно за другим, зачем создавать 8 раз?! - person Dewan159; 03.01.2020
comment
Я обновил свой ответ примером параллельной обработки, который должен помочь. Что касается daemonizing, у него есть большие преимущества, но я давно его не пробовал. У меня был неудачный опыт с ним еще в Laravel 5.1, и с тех пор я не пробовал! - person Spholt; 03.01.2020