Задержка 200 мс для DynamoDB из холодного лямбда против <10 мс при горячем. Почему?

Я разрабатываю бессерверную архитектуру AWS.

У меня есть лямбда, подключенная к подсети в VPC. Я настроил конечную точку VPC для доступа к моей таблице DynamoDB.

Когда моя лямбда холодная, выполнение простой команды GetItem для моей таблицы dynamodb занимает до 200-300 мс. Это просто команда GetItem, я уже вычел лямбда-инициализацию, создание экземпляра клиента DynamoDB и т. д. Это неприемлемо для моего приложения.

Однако, когда моя лямбда горячая, я беру только ~ 8-9 мсм для команды GetItem, что приемлемо.

Есть ли задержки ENI, потому что моя лямбда подключена к подсети? Если да, то что я могу сделать, чтобы ускорить его? Или есть другая проблема, которую я не вижу?

Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
В этой статье мы рассмотрим, как включить доступ Java Lambda к экземпляру AWS RDS MySQL.
3
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Задержки, с которыми вы сталкиваетесь, связаны с кэшированием метаданных, которое DynamoDB использует для уменьшения задержки.

Когда запросы к DynamoDB выполняются часто, он использует локальное кэширование определенных метаданных, таких как аутентификация, местоположение данных и т. д....

Когда запросы нечасты, этот кеш устаревает и дает дополнительную надежду службе DynamoDB для обслуживания ваших запросов. Это одна из основных причин уменьшения задержки DynamoDB по мере увеличения пропускной способности.

Кое-что, что вы можете сделать, чтобы избежать задержки:

  1. Убедитесь, что вы повторно используете соединения TCP, установив для параметра keep-alice значение true.
  2. Убедитесь, что клиент создан вне обработчика Lambda
  3. Отправьте фиктивный трафик в вашу таблицу DynamoDB, чтобы убедиться, что кэш метаданных остается горячим.

Ты прав. На самом деле, именно поэтому я отключил инициализацию клиента Dynamodb от какой-либо функции, чтобы ее можно было повторно использовать в будущих экземплярах лямбда-выражений. Но я сделал это слишком давно и забыл об этом...

AnonBird 07.01.2023 00:30

Другие вопросы по теме