#amazon-web-services #.net-core #aws-lambda #aws-sdk
Вопрос:
Я включил предусмотренный параллелизм (5 единиц) в одной из моих функций lambda, которая вызывается с помощью запросов шлюза API.
У меня сложилось впечатление, что это полностью устраняет «холодные запуски» или «входы», но когда я нажимаю на соответствующую конечную точку Api после «периода простоя», Рентгеновский снимок и облачные часы показывают мне, что я бы подумал, что это холодный запуск?
Длительность инициализации: 2379,57 мс
В последующих запросах этого нет, и мое общее время для запроса составляет примерно от 3,8 с до 200 мс.
Я понимал, что подготовка параллелизма автоматически приведет к тому, что сначала будут подготовлены подготовленные, и, таким образом, ВСЕГДА будет создаваться последний сценарий 200 мс (при условии, что мы не превышаем количество параллелизма). Я создал отдельную лямбду и являюсь единственным, кто ее использует, поэтому я знаю, что проблема не в этом. Я создал псевдоним, который указывает на версию, а не на ПОСЛЕДНЮЮ версию.
Лямбда-метрики отображают «Вызовы» «Предусмотренные вызовы» с соответствующим цветом на диаграмме, который указывает на предусмотренный параллелизм.
Почему я все еще получаю то, что кажется холодным началом?
Если все вышесказанное кажется нормальным, и я действительно понимаю, что должно происходить, будет ли это связано с услугами, используемыми в самой лямбде?
Я использую S3, SQS и DynamoDB. Лямбда-это функция c# .net core 3.1
Правка №1 —
Я должен уточнить, что функция на самом деле является asp.net ядро 3.1 веб-api не имеет сервера и имеет все обычные подключенные службы конфигурации/точки настройки, а также классы контроллеров.
Я рассчитал и записал для консоли время, необходимое для настройки служб/Настройки и конструктора контроллера. Время составляет .6s/0,0 с/0,0 с при первом запуске.
Я включил XRay на уровне SDK в Startup.cs с помощью:
AWSSDKHandler.RegisterXRayForAllServices();
Теперь я вижу следующую разбивку на рентгеновском снимке:
И после нескольких (быстрых) казней я вижу:
Я хочу, чтобы КАЖДОЕ выполнение выполнялось в течение 163 мс и полностью обходило почти 4 мс.
Комментарии:
1. Убедитесь, что вы выполнили всю возможную работу по инициализации, прежде чем обрабатывать фактический вызов. Особенно убедитесь, что вы создали клиент DyamoDB и что все ваши классы готовы к работе. Используйте метод экземпляра в качестве лямбда-обработчика и создайте экземпляры всех классов, которые вам нужно вызвать в конструкторе.
2. Я должен был упомянуть здесь, Мэтт, что Лямбда-функция на самом деле является asp.net основное приложение веб-api/контроллер веб-Api, а не «стандартная» Лямбда. Таким образом, у него есть ряд функций разработчика, регистрации услуг и т.д., А затем функции контроллера. Как это повлияет на ваш предыдущий комментарий, учитывая новую информацию?
3. Хм … я не делаю asp.net так что я не уверен. Просто помните, что подготовка вашего параллельного экземпляра-это просто инициализация-это только то, что требуется для лямбда-среды выполнения, чтобы получить экземпляр вашего обработчика. Все, что происходит при вызове обработчика, заставляет вызов ждать его, и это, вероятно, задержка в 2,4 секунды, которую вы видите. Обычно это загрузка и настройка классов и все такое.