Я разрабатываю бессерверную архитектуру AWS.
У меня есть лямбда, подключенная к подсети в VPC. Я настроил конечную точку VPC для доступа к моей таблице DynamoDB.
Когда моя лямбда холодная, выполнение простой команды GetItem
для моей таблицы dynamodb занимает до 200-300 мс. Это просто команда GetItem
, я уже вычел лямбда-инициализацию, создание экземпляра клиента DynamoDB и т. д. Это неприемлемо для моего приложения.
Однако, когда моя лямбда горячая, я беру только ~ 8-9 мсм для команды GetItem
, что приемлемо.
Есть ли задержки ENI, потому что моя лямбда подключена к подсети? Если да, то что я могу сделать, чтобы ускорить его? Или есть другая проблема, которую я не вижу?
Задержки, с которыми вы сталкиваетесь, связаны с кэшированием метаданных, которое DynamoDB использует для уменьшения задержки.
Когда запросы к DynamoDB выполняются часто, он использует локальное кэширование определенных метаданных, таких как аутентификация, местоположение данных и т. д....
Когда запросы нечасты, этот кеш устаревает и дает дополнительную надежду службе DynamoDB для обслуживания ваших запросов. Это одна из основных причин уменьшения задержки DynamoDB по мере увеличения пропускной способности.
Кое-что, что вы можете сделать, чтобы избежать задержки:
Ты прав. На самом деле, именно поэтому я отключил инициализацию клиента Dynamodb от какой-либо функции, чтобы ее можно было повторно использовать в будущих экземплярах лямбда-выражений. Но я сделал это слишком давно и забыл об этом...