2015-08-28 2 views
18

У меня есть лямбда-функция и таблица динамо-db в том же регионе (us-east-1). В лямбда-функции я выполняю очень простой запрос:Очень медленные запросы к dynamodb от лямбда-функции

params = 
    TableName: 'users' 
    Item: 
    email: 
     S: event.body.email 
    ConditionExpression: 'attribute_not_exists (email)' 
dynamodb.putItem(params, context.done) 

Есть только несколько строк в таблице DynamoDB, есть Hash ключ на адрес электронной почты и чтения/записи throughtputs настроены на 5/5.

Лямбда-функция exeutes в ~ 4 секунды ... Это очень медленно. Я делаю что-то неправильно?


Я проверил свою функцию с различными настройками памяти для лямбда-функции (он был установлен в 128MB ранее):

  • 256mb => ~ 2000 мс
  • 512mb => ~ 1000мс
  • 1024MB => ~ 500мс
  • 1536mb => ~ 300мс

Таким образом, кажется, что время отклика зависит от 1-1 по памяти (ну, по сути, на вычислительной мощности, поскольку AWS масштабирует ее вместе с памятью). Тем не менее это сумасшествие, потому что для создания очень простого REST API я должен установить память 1536mb, чтобы сделать его «отзывчивым», в то время как моя программа использует 17mb!


Хмм с другой стороны, я подсчитал, что это будет стоить:

  • 8,32 $ за 1 Milion 4000ms запросов с использованием 128МБ памяти
  • 10,004 $ за 1 Milion 300мс запросов с использованием 1536mb памяти

так что это не так плохо, я думаю ...

+0

Вы уверены, что вы больше не используете что-то в своей лямбда-функции? Простому JS-вызову не нужно столько памяти и не нужно тратить много времени. – Guy

+0

Просто для сравнения, какую производительность вы получаете, если попадете в SimpleDB? –

ответ

2

Ну, проблема может lso относятся к un-pausing контейнеру, на котором работает Lambda. Вы также можете оптимизировать, как вы инициализируете свои объекты, чтобы они не возвращались повторно при каждом вызове функции.

См. Статью Container reuse in Lambda.

+0

Интересно. Но то, что я делаю, требует только модуль aws-sdk и отправка запроса в базу данных. Я также попытался сделать много запросов один за другим, чтобы контейнер снова использовался ... – user606521

+0

Задержки, которые вы описываете, очень велики. Это также может быть сильно используемый регион «us-east-1». – kixorz

+0

Я попробую использовать функцию в других регионах. – user606521

Смежные вопросы