Почему SQS лучше, чем S3 для сценария на основе событий - PullRequest
1 голос
/ 07 февраля 2020

Мне нужно разработать оптимизированное по стоимости решение, которое должно быть aws облачным. Проблема, которую я должен решить, состоит в том, что у меня 90 миллионов сообщений, приходящих из базы данных. Каждое событие является независимым, и для его обработки не требуется упорядочивание. Я должен обработать каждое сообщение и выполнить какую-то операцию, а затем поместить ее в службу поиска Elasti c.

Решение, которое, как я думал, находится ниже одного

AWS API-->LAMBDA-->SNS-->SQS(1)-->LAMBDA-->ES
                     --->SQS(2)-->LAMBDA-->ES

В основном из SNS используется для одновременного использования нескольких SQS.

При этом я подумал, почему мы не можем использовать S3, чтобы запись могла быть сохранена навсегда и может быть реплицирована в другой регион. Также мы можем вызвать Лямбда-функция для каждого события пут в S3.

Так что мой план - если мы будем использовать S3, то для 90 миллионов записей мы будем создавать 90 миллионов файлов в s3, а затем, используя фронт облака, мы можем читать или даже без облака из мы можем читать из s3 с помощью лямбда-функции.

API-->S3-->lambda--->ES

Пропускная способность S3 put равна 3500 / секунда / папка, а out-out - 5000 / сек / префикс. Стоимость запроса на размещение в s3 и sqs практически одинакова.

Может кто-нибудь сказать мне, что не так с использованием решения на основе S3. Я знаю, что использование SQS здесь выглядит очень очевидным, но каков риск, если мы используем S3 в этом случае?

Пропускная способность, которую я ищу, составляет 5 тыс. В секунду.

Даже стоимость мудрый SQS выглядит дороже, потому что мне нужно платить за SNS + SQS, но если мы используем S3 только S3 пут и лямбда

Пожалуйста, предложите

1 Ответ

1 голос
/ 07 февраля 2020

Я бы не стал делать ни то, ни другое, и сделал бы следующее:

API --> SNS --> Lambda --> ES
            --> Lambda --> ES

SNS to lambda будет запускать столько лямбд, сколько необходимо для обработки нагрузки запроса, вплоть до ограничений на вашем аккаунте, или ограничения, установленные на лямбду. Единственная причина для включения SQS - это некоторая дополнительная устойчивость, но я бы, вероятно, просто сделал это в Lambda, как очередь недоставленных сообщений.

...