Лучший способ обработки сообщений SQS

У меня есть клиент, который постоянно заливает данные полуреального времени в очередь sqs и хочет обрабатывать и хранить сообщения. Моя первая мысль состояла в том, чтобы использовать планировщик CloudWatch, который запрашивает лямбду с приблизительным количеством сообщений, которые лямбда затем порождает рабочими лямбда-выражениями для обработки и отправки данных в Firehose. Проблема в том, что каждый день в очередь будут помещаться сотни тысяч сообщений. Я также мог бы использовать EC2 для этого, но есть ли другой экономичный способ обработки очереди в полуреальном времени.


person j doe    schedule 14.05.2018    source источник
comment
Какой объем обработки требует каждое сообщение? T2.nano стоит 0,14 доллара США в день. Lambda в конечном итоге будет намного дороже, чем маленький EC2.   -  person stdunbar    schedule 14.05.2018
comment
@stdunbar Обработка одного сообщения занимает около 0,012 секунды. EC2, кажется, путь. Спасибо.   -  person j doe    schedule 14.05.2018
comment
Возможно, SQS не подходит для этого. Поскольку кажется, что ваши данные похожи на поток, вы можете посмотреть на Kinesis.   -  person Asdfg    schedule 14.05.2018
comment
@Asdfg Мне бы очень хотелось использовать Kinesis, но по какой-то причине клиент выгружает данные только в SQS. SQS — не лучший ресурс для этой задачи.   -  person j doe    schedule 14.05.2018
comment
Служба ecs с автоматическим масштабированием приложений на основе длины очереди может неплохо работать для sqs, если поток не подходит.   -  person jeffrey    schedule 14.05.2018
comment
Пример использования CloudWatch/Lambda, если он подходит: cloudonaut .io/   -  person jarmod    schedule 14.05.2018


Ответы (1)


Рекомендуемым решением для обработки потоковых данных в AWS Lambda является отправка данных в Amazon Kinesis, который затем может автоматически активировать функцию Lambda. Kinesis также сохраняет порядок сообщений. (Amazon SQS сохраняет порядок только при использовании очереди FIFO, пропускная способность которой ограничена.)

Если вы действительно ограничены обработкой из SQS, вы можете написать программу, которая извлекает данные из SQS и отправляет их в Kinesis, или просто берет из SQS и немедленно обработает данные. Такая программа может работать на инстансе Amazon EC2 или регулярно запускаться запланированным событием Amazon CloudWatch.

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

person John Rotenstein    schedule 14.05.2018