У меня есть лямбда-функция NodeJs в AWS, которая должна читать некоторые данные. В качестве источника данных мы попробовали два варианта - S3
и DynamoDB
. Обе они имеют одну и ту же проблему - когда мы проводим нагрузочное тестирование (10 запросов в секунду в течение 100 секунд), некоторые запросы к этим S3/DynamoDB
не выполняются в течение 30 секунд, что является нашим временем ожидания Lambda. Сами запросы очень легкие - для S3
это файл размером 1 КБ, а для DynamoDB
это таблица, содержащая только одну запись. В среднем эти запросы занимают менее 100 мс, но иногда мы получаем эти очень длинные пики, о которых я говорю.
Частота таких длинных запросов довольно мала - менее 1%, но для нас это по-прежнему неприемлемо. Более того, я не вижу причин, по которым у нас такие длинные ответы.
Еще одна вещь, которую мы заметили, это то, что эти 30 секунд + запросы обычно происходят после длительных периодов (4 часа или более), когда эти S3/DynamoDB
ресурсы не вызываются.
Единственная причина, по которой я могу придумать, заключается в том, что после длительных периодов бездействия инфраструктура AWS не может достаточно быстро создать необходимое количество ENI. ENI необходимы, потому что S3
и DynamoDB
вызываются через HTTP aws-sdk
. Но это всего лишь предположение, которое я не знаю, как проверить.
В настоящее время я думаю о разогреве ENI, делая запросы к S3/DynamoDB
, но я еще не пробовал.
Если у кого-то были подобные проблемы, я был бы признателен за любые предложения по устранению проблемы.
P.S. Увеличение лямбда-таймаута для нас не вариант. 30 секунд более чем достаточно, чтобы совершать такие простые звонки.