Laravel Queue — как настроить быстрый процессорPhp

Кемеровские программисты php общаются здесь
Anonymous
Laravel Queue — как настроить быстрый процессор

Сообщение Anonymous »


Я использую Laravel 5.5 и пытаюсь настроить быструю обработку очереди. Я сталкивался с одним препятствием за другим.

Этот сайт представляет собой службу подбора работодателей и сотрудников. Поэтому, когда работодатель публикует вакансию, ему необходимо просмотреть всех сотрудников в нашей системе и вычислить ряд переменных, чтобы определить, насколько хорошо они соответствуют вакансии. Мы все это продумали, но обработка каждого запроса за раз занимает много времени, когда в системе работают тысячи сотрудников. Итак, я решил написать пару таблиц. Первая представляет собой простую таблицу, определяющую идентификатор позиции и статус. Вторая представляет собой таблицу, в которой перечислены все идентификаторы сотрудников, идентификатор должности и статус этого обрабатываемого сотрудника. Написание занимает всего несколько секунд, а затем позволяет пользователю продолжить работу с приложением.

Проблема, с которой я столкнулся, заключается в том, что я пробовал соединения с базой данных (MySQL), Redis и SQS для очереди, и все они работают очень медленно. При подключении к базе данных задания выполняются нормально, но выполнение 10 000 заданий в очереди занимает несколько часов. В SQS и Redis я получаю массу ошибок. Я проверил процессоры клонов, на которых работают рабочие процессы, и они едва достигают 40%, поэтому я не перегружаю серверы.

Затем у меня настроен сервер, который каждую минуту запускает cron для проверки новых записей в первой таблице. Найдя его, он помечает его как запущенное и захватывает всех сотрудников, просматривая каждого из них и запуская поставленное в очередь задание. Задание, которое я определил правильно, отправляется в очередь, и запуск queue:work обрабатывает задание правильно, все это проверено.

Изначально я запускал queue:work на сервере, на котором запущен cron (используя Supervisor и пытаясь запустить до 300 процессов), но затем создал 3 сервера-клона, которые не запускают cron, но запускать только Supervisor (100 процессов на клон), а также убивать Supervisor на первом сервере.

Я только что читал о Horizon и не уверен, что это поможет ситуации. Я продолжаю искать информацию о том, как правильно настроить систему обработки очередей с помощью Laravel, и получаю больше вопросов, чем ответов.

Кто-нибудь знаком с этим материалом и может дать какой-нибудь совет, как его правильно настроить, чтобы он работал очень быстро и без сбоев (при условии, что в моем коде нет ошибок)?

ОБНОВЛЕНИЕ: Следуя другим советам по публикации, я решил поделиться некоторыми подробностями:
[*]
Я использую Forge в качестве инструмента настройки серверов AWS EC2 с 2 ГБ ОЗУ.
[*]
Каждый из трех клонов имеет следующую рабочую конфигурацию:

command=php /home/forge/default/artisan очередь:work sqs --sleep=10 --daemon --quiet --timeout=30 --tries=3 имя_процесса=%(имя_программы)s_%(номер_процесса)02d автозапуск = правда авторестарт = истина стопасгрупп = истина killasgroup=истина пользователь = подделка numprocs=100 stdout_logfile=/home/forge/.forge/worker-149257.log [*]База данных находится на Amazon RDS.

Мне интересно, будет ли кеш Laravel работать с системой очередей. Есть элементы сценария, поставленного в очередь, которые являются общими для каждого запуска, поэтому, возможно, если я поставлю эти данные в очередь с самого начала, это сэкономит некоторое время. Но я не уверен, что это будет существенным улучшением.

Вернуться в «Php»