Я установил очереди в Laravel для своих скриптов обработки. Я использую beanstalkd и supervisord. Существует 6 разных труб для различных видов обработки.
Проблема в том, что для каждой трубки ремесленник постоянно порождает рабочих каждую секунду. Рабочий код, кажется, спят в течение 1 секунды, а затем рабочая нить использует 7-15% CPU, умножьте это на 6 трубок... и я хотел бы иметь нескольких рабочих на трубу.. мой процессор будет съеден.
Я попытался изменить 1-секундный сон на 10 секунд. Это помогает, но по-прежнему существует огромный скачок CPU каждые 10 секунд, когда рабочие снова встают. В настоящее время я даже ничего не обрабатываю, потому что очереди полностью пусты, а просто рабочие ищут что-то делать.
Я также тестировал, чтобы увидеть использование процессора larvel, когда я обновил страницу в браузере, и это зависело от 10%. Я сейчас нахожусь в узле с ограниченным доступом, чтобы объяснить это, но все же... кажется, что рабочие разворачивают экземпляр laravel каждый раз, когда они просыпаются.
Нет ли способа решить это? Должен ли я просто вкладывать большие деньги в более дорогой сервер, чтобы иметь возможность слушать, готова ли работа?
EDIT:
Найденное решение... он НЕ должен был использовать очередь мастеров: слушатель или очередь: работа Я заглянул в код очереди и, похоже, не существует способа обойти эту проблему, она требует, чтобы laravel загружался каждый раз, когда работник проверяет, что нужно делать больше.
Вместо этого я написал своего собственного слушателя, используя pheanstalk. Я все еще использую laravel для ввода вещей в очередь, затем мой пользовательский прослушиватель анализирует данные очереди, а затем запускает команду artisan для запуска.
Теперь мое использование процессора для моих слушателей меньше% 0, единственный раз, когда мой процессор начинает стрелять, это когда он на самом деле находит работу, а затем запускает команду, я в порядке с этим.