Должен ли экземпляр функции AWS Lambda в Node.js принимать другой запрос во время асинхронного ожидания? - PullRequest
0 голосов
/ 03 мая 2019

Допустим, у меня есть очередь запросов для моей лямбды, и внутри лямбды может быть внешний вызов службы, который занимает 500 мс, который упакован в асинхронное ожидание, как

async callSlowService(serializedObject: string) Promise<void>{
    await slowServiceClient.post(serializedObject);
}

Должен ли я ожидатьчто мой экземпляр Lambda получит другой запрос из очереди, ожидая медленного вызова?Я знаю, что это также раскручивает новые экземпляры Lambda, но я не об этом говорю о чередовании запросов на одном экземпляре .

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

    async someCoreFunction() Promise<void>{
        // Business logic 
        console.log("Before wait");
        await sleep(2000);
        console.log("After wait");
    }
}

const sleep = (milliseconds) => {
    return new Promise(resolve => setTimeout(resolve, milliseconds))
};

И хотя он определенно занимает 2 секунды между инструкциями «До ожидания» и «После ожидания», новых журналов за это время не пишется.

1 Ответ

1 голос
/ 03 мая 2019

Нет.

Лямбда как сервис в значительной степени не знает, что делает ваш код.Он просто принимает запрос, вызывает ваш код и затем ожидает его возврата.

Я бы не ожидал, что AWS внедрит такую ​​функцию, как чередование, в ближайшее время.Требуется, чтобы время выполнения лямбды имело достаточные знания о том, как ведет себя ваш код (например, вы можете ожидать двух одновременных длинных асинхронных вызовов в одном вызове, поэтому прерывание при первом обращении к нему будет некорректным).Это также может привести к бесконечным проблемам для людей, использующих общую область за пределами обработчика для общей установки / разрыва.

Поскольку вы платите за вызов и время, я не вижу большой разницы междучередование и параллельная обработка очереди (которую изначально поддерживает лямбда);учитывая, что время ожидания все еще требует некоторых вычислений.Если когда-либо произойдет чередование, я бы ожидал, что AWS сможет уменьшить расход своих собственных ресурсов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...