Очень медленные запросы к dynamodb от лямбда-функции
У меня есть лямбда-функция и таблица динамо-db в той же области (us-east-1). В лямбда-функции я выполняю очень простой запрос:
params =
TableName: 'users'
Item:
email:
S: event.body.email
ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)
В таблице DynamoDB всего несколько строк, есть Хэш-ключ по электронной почте, а значения для чтения/записи - 5/5.
Лямбда-функция выполняется через ~ 4 секунды... Это очень медленно. Я что-то делаю неправильно?
Я тестировал свою функцию с различными настройками памяти для лямбда-функции (ранее она была установлена на 128 Мб):
- 256mb = > ~ 2000ms
- 512mb = > ~ 1000 мс
- 1024mb = > ~ 500ms
- 1536mb = > ~ 300 мс
Таким образом, кажется, что время отклика зависит от 1-1 по памяти (ну на самом деле на вычислительной мощности, поскольку AWS масштабирует ее вместе с памятью). Тем не менее это сумасшествие, потому что для создания очень простого REST API я должен установить память 1536mb, чтобы сделать его "отзывчивым", в то время как моя программа использует 17mb!
Хм, с другой стороны, я подсчитал, что это будет стоить:
- 8.32 $за 1 миллион запросов в 4000 мс с использованием памяти 128 МБ
- 10.004 $за 1 миллион 300 мс запросов с использованием памяти 1536 МБ.
Значит, это не так уж плохо, я думаю...
Ответы
Ответ 1
Ну, проблема также может быть связана с отключением контейнера, в котором работает функция Lambda
. Вы также можете оптимизировать, как вы инициализируете свои объекты, чтобы они не получали повторную инициализацию каждый раз, когда вызывается функция.
См. статью Повторное использование контейнера в Lambda.