Пул соединений в AWS через лямбды - PullRequest
0 голосов
/ 28 июня 2018

Мы знаем, что лямбды оплачиваются по времени исполнения. Итак, теперь я хочу подключиться к БД SQL Server из лямбды. Если бы я создавал соединение в каждой лямбде, это было бы тяжело для лямбды.

Есть ли лучший способ сохранить мои SQL-соединения живыми в одном месте, и их можно будет использовать на всех моих лямбдах? Или хотя бы жив для одной лямбды для нескольких казней.

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

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Да, есть лучшее решение.

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

Однако в AWS Lambda существует концепция повторного использования контейнера. Это означает, что если вы часто вызываете Lambdas, то весьма вероятно, что тот же контейнер, который обслуживал ваш предыдущий запрос, будет использоваться для обслуживания вашего текущего запроса. И если это произойдет, то вы получите предыдущий контекст выполнения, который включает в себя все объявления и соединения с базой данных (кроме кода обработчика), как это было при предыдущем выполнении.

Ниже описано то, что задокументировано для многократного использования контейнера AWS Lambda

После выполнения лямбда-функции AWS Lambda поддерживает Контекст выполнения в течение некоторого времени в ожидании другой лямбды вызов функции. По сути, служба замораживает выполнение Контекст после завершения лямбда-функции и оттаивания контекста для повторное использование, если AWS Lambda выбирает повторное использование контекста, когда Lambda функция вызывается снова. Этот подход повторного использования контекста выполнения имеет следующие последствия:

  • Все объявления в вашем коде функции Lambda (вне кода обработчика, см. Модель программирования) остаются инициализированными, обеспечивая дополнительные оптимизация, когда функция вызывается снова. Например, если ваш Лямбда-функция устанавливает соединение с базой данных, а не восстановление соединения, исходное соединение используется в последующие обращения . Мы рекомендуем добавить логику в ваш код для проверки если соединение существует до его создания.

Для более подробной информации проверьте здесь

0 голосов
/ 28 июня 2018

Я не знаю, как это будет работать с C # в лямбде, но я подозреваю, что он должен работать так же, как узел или несколько похожий.

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

Я обработал пул соединений, используя одну лямбда-функцию, которая отвечает за соединение с базой данных, и все остальные лямбда-функции вызывают эту функцию, чтобы получить то, что они хотят от базы данных, и потому что эта лямбда повторно использует соединение, которое работало как Шарм; Я приложил часть дизайна, который использовал, чтобы уточнить, что я написал

enter image description here

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