AWS Lambda не работает независимо - PullRequest
0 голосов
/ 22 октября 2018

Я использую nodejs для использования AWS Lambda.

Как я знаю, каждая функция лямбды обрабатывается в независимом и параллельном процессе.

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

// test.js
const now = new Date();

module.exports = () => {
    console.log(now);
};

// handler.js
const test = require('./test');

module.exports.hello = async (event, context) => {
    test();
    return {
        statusCode: 200,
        body: null
    };
};

РЕЗУЛЬТАТ: журнал обработчика приветствия

Как я и предполагал, каждая функция выполнялась независимо, поэтому значение console.log(now) всегда должно быть точкой накоторый был выполнен.

Однако в реальном журнале значение now непрерывно записывается в момент самого первого выполнения, а не выполнения каждой функции.

Журналзначение через 5 минут было одинаковым.Однако значение изменилось через 12 часов, но после этого оно показывает ту же проблему.

Этот результат дает нам серьезное представление о том, как управлять подключением к БД.

Существует два предположения для* каждый случай переработки лямбдыинициализация

Если нет,

  • лучше использовать простые соединения и регулярные запросы для быстрого потребления соединений

Как мы можем использовать лямбда в максимумепроизводительность?

Как мы можем интерпретировать результаты теста выше?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

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

0 голосов
/ 22 октября 2018

AWS Lambda создает и повторно использует контейнеры, поэтому вам необходимо понять влияние этой практики на модель программирования.

При первом выполнении функции будет создан новый контейнер для ее выполнения.

Допустим, ваша функция завершается, и через некоторое время вы вызываете ее снова.Лямбда может создать новый контейнер снова и снова.Однако, если вы не изменили код функции Lambda и прошло не так много времени, Lambda может повторно использовать предыдущий контейнер.Это дает преимущества в производительности: Lambda пропускает инициализацию языка nodejs, и вы пропускаете инициализацию в своем коде (например, вы можете повторно использовать соединения с БД);файлы, которые вы записали в / tmp в прошлый раз, все еще будут там, если контейнер будет повторно использован;все, что вы инициализировали глобально вне обработчика лямбда-функции, сохраняется.

Подробнее см. Общие сведения о повторном использовании контейнера в AWS Lambda .

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