Laravel Queue worker на AWS SQS — много запросов?

У меня есть две очереди Amazon SQS, которые контролируются двумя работниками. Я использую его для отправки электронных писем, отправки рабочих запросов. Типичный бэкенд. Должно быть около 100 рабочих мест в этом месяце.

Тем не менее, я получаю электронное письмо от Amazon, которое уже составляет 887 457 запросов бесплатного уровня 1 000 000 запросов Amazon Simple Queue Service.

Интересно, как я попаду на этот номер? Опрашивают ли рабочие очередь, которая считается запросом? Если да, то можем ли мы увеличить этот интервал?


person helloworld    schedule 07.04.2018    source источник


Ответы (3)


Для обработчиков очереди есть опция --sleep:

php artisan queue:work --help

По умолчанию это 3 секунды, поэтому кажется, что запрос делается от каждого из ваших воркеров каждые 3 секунды. С 2 работниками это 57 600 запросов в день. Если с тех пор, как вы начали это, прошло около 2 недель, это будет ~ 800 тыс. запросов.

person Andy White    schedule 07.04.2018
comment
Спасибо! Я заметил, что у обоих рабочих был сон в 1 секунду, так что теперь понятно, что бесплатный уровень закончился! - person helloworld; 07.04.2018

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

Это означает, что если в очереди нет сообщений, SQS не будет отвечать до 20 секунд. То есть 20 секунд, если сообщений еще нет, то или короче, если какое-либо сообщение попадает в очередь. Это значительно сокращает ваши запросы SQS в 20 раз, а также количество запросов, которые действительно нужно обрабатывать.

person jdog    schedule 09.07.2019

Кроме того, я имею в виду, что в сообщениях amazon SQS есть что-то вроде максимального размера сообщения. Способ обработки больших сообщений заключается в том, что они считают одно сообщение несколькими запросами. Некоторое время назад это было причиной, по которой я достиг предела бесплатного уровня. Примером больших сообщений являются задания, в конструкторе которых есть большие объекты (красноречивые модели). Кажется, что эти объекты сериализованы, и это причина огромного размера сообщения.

Решение состоит в том, чтобы предоставить конструкторам заданий только простые типы данных (например, идентификатор пользователя, а не пользовательский объект), а затем получить весь объект в методе обработки задания.

person Phil    schedule 05.03.2019