Ну, я недавно создал безсерверное приложение, используя AWS Lambda.Мой текущий поток приложений выглядит следующим образом:
API Gateway (1) → Lambda Function (2) → SQS (3) → Lambda Function (4) → DynamoDB (5)
Теперь есть несколько соображений:
- Клиент собирается отправить запрос в мой API(1).
- К событию API прикреплена лямбда-функция (2), поэтому она будет получать запрос API и обрабатывать его.
- Теперь вот, где вопрос входит.После обработки запроса результат этой обработки ДОЛЖЕН быть вставлен в DynamoDB (5).В настоящее время я отправляю его в SQS (3) и возвращаю ответ на HTTP-запрос, отправленный клиентом.
- Хотя запрос завершен и получен ответ, сообщения SQS (3) будут извлечены по событиюдругой лямбда-функцией (4), которая собирается вставить обработанное сообщение в DynamoDB (5).
Когда я впервые прототипировал этот поток, у меня было предположение: посылка сообщения в SQS была быстреечем вставить его в DynamoDB.Тем не менее, я никогда не делал ни реальный тест, ни что-то подобное, поэтому мое предположение было просто произвольным.
Наконец, вопрос: , какое из действий быстрее?Отправка обработанного запроса в SQS или непосредственно в DynamoDB?
Учтите, что в обоих случаях он будет выполняться из лямбда-функции (2), поэтому теоретически, как и в том же самомв контексте самого AWS, у него не будет того же времени ответа, что и при запросе его с другого компьютера.
Если ответ на этот вопрос:
- Вставка непосредственно в DynamoDB происходит быстрее
- Вставка непосредственно в DynamoDB не быстрее, но разница незначительна
Я могу удалить как SQS (3), так и вторую лямбда-функцию (4), что приведет к более простой и более сложнойпрямой поток.
Однако, если отправка сначала в SQS будет больше, я могу сохранить этот поток.