AWS Sqs ReceiveMessage не так быстр, как SendMessage

У меня есть первая веб-служба, которая используется для отправки сообщений в aws sqs, эта веб-служба развернута на отдельном экземпляре ec2. Веб-служба работает под управлением IIS 8. Эта веб-служба может обрабатывать 500 запросов в секунду с двух компьютеров, что означает 1000 запросов в секунду. Он может обрабатывать больше запросов.

У меня есть второй веб-сервис, развернутый на другом экземпляре ec2 той же мощности/конфигурации. Этот веб-сервис будет использоваться для обработки сообщений, хранящихся в Sqs. В настоящее время для целей тестирования я получаю только сообщение от Sqs и просто удаляю его.

У меня есть служба aws Sns, которая сообщает второй веб-службе, что в sqs пришло сообщение, перейдите и получите это сообщение для обработки.

Но я замечаю, что мой второй веб-сервис не так быстр, как мой первый веб-сервис, каждый раз, когда я запускаю тест, сообщения остаются в sqs, но в идеале в sqs не должно оставаться никаких сообщений.

Пожалуйста, объясните мне, каковы возможные причины этого и область, на которой я должен сосредоточиться.

Заранее спасибо.


person user3417528    schedule 14.07.2014    source источник


Ответы (2)


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

person Ben Whaley    schedule 14.07.2014
comment
Спасибо за ответ. но сейчас у меня не такой большой объем, как я уже упоминал, поступает только 1000 запросов в секунду. Даже я наблюдал, что процессор не может обрабатывать 500 запросов в секунду. - person user3417528; 15.07.2014

Сколько сообщений вы получаете одновременно? Я настоятельно рекомендую установить MaxNumberOfMessages на 10, а затем использовать DeleteMessageBatch с партиями по 10. Это не только значительно увеличит пропускную способность, но и сократит ваш счет за SQS примерно на 60%.

Кроме того, я смущен темой SNS. Нет необходимости в том, чтобы тема SNS сообщала другой веб-службе, что сообщение существует. Если каждое сообщение создает публикацию в этой теме, то вы добавляете много дополнительной работы и расходов. Вместо этого вы должны использовать длинный опрос и установить WaitTimeSeconds на 20 и просто всегда вызывать SQS. Даже если вы получаете 0 сообщений в течение месяца, 2 сервера постоянно долго опрашивают, это будет в пределах бесплатного уровня. Если вы находитесь выше бесплатного уровня, общая стоимость 2 серверов, постоянно опрашивающих очередь SQS, составляет 0,13 доллара США в месяц.

person tster    schedule 25.07.2014