Подключение от AWS Lambda к MongoDB - PullRequest
0 голосов
/ 10 октября 2018

Я работаю над проектом NodeJS и, похоже, использую довольно распространенную настройку AWS.Мой ApiGateway получает вызов, запускает лямбду A, затем эта лямбда A запускает другие лямбды, скажем, B или C, в зависимости от параметров, передаваемых из ApiGateway.

Lambda A должен получить доступ к MongoDB и избежать проблем с запуском MongoDB самостоятельно, я решилиспользовать млаб.ATM Lambda A обращается к MongoDB с помощью драйвера NodeJS.Теперь, чтобы не устанавливать соединение с каждым выполнением Lambda A, я использую пул соединений, опять же, внутри кода Lambda A, вне обработчика. Я сохраняю пул соединений, который позволяет мне повторно использовать соединения, когда Lambda A вызывается несколько раз.Кажется, это работает нормально.Однако я не уверен, что делать с соединениями, когда Lambda A вызывает Lambda B, а Lambda B должен получить доступ к базе данных mLab MongoDB.

  1. Можно ли каким-то образом передать пул соединений, или Lambda B должен был бы сохранить собственный пул соединений?
  2. Я думал об использовании API данных mLab , чтовыставляет большинство операций драйвера MongoDB, и поэтому я мог бы использовать HTTP-вызовы, например, GET и POST, для запуска команд с базой данных.Кажется, что похоже на RESTHeart , кажется.

Я склоняюсь к варианту 2, но в API данных mLab ясно говорится, что следует избегать использования REST api, если толькоНевозможно подключиться с помощью драйвера MongoDB напрямую:


Первый метод - тот, который мы настоятельно рекомендуем, когда это возможно для повышения производительности и функциональности, - это подключение с использованием одного из доступных драйверов MongoDB.Вам не нужно использовать наш API, если вы используете драйвер.Второй метод, описанный в этой статье, заключается в подключении через RESTful Data API mLab.Используйте этот метод, только если вы не можете подключиться с помощью драйвера MongoDB.


Учитывая все это, как лучше всего к нему подойти?1 или 2 или есть какой-то другой вариант, который я должен рассмотреть?

1 Ответ

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

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

Я думаю, что оба ваших решенияхорошо в зависимости от использования.

Если вы склонны иметь устойчивый средний параллелизм к лямбда-сигналам A и B в течение часа (это практическое правило относительно того, как долго AWS поддерживает работу экземпляра лямбды)тогда хорошее решение иметь их обоих со своими статическими связями.Это потому, что есть вероятность, что запрос достигнет уже запущенной и подключенной лямбды.Я также предположил бы, что драйверы узлов для 'vanilla' mongo более зрелые, чем драйверы для RESTFul Data API.

Однако, если вы получаете spikey или неравномерную загрузку, вы можете использовать RESTFul Data API.Это потому, что вы будете централизовать ответственность за управление количеством открытых соединений с вашими экземплярами в одной точке, что в этих условиях означает, что вы с меньшей вероятностью будете открывать ненужные соединения или использовать всю свою текущую емкость и иметьждать установления нового соединения.

В конечном итоге это игра вероятностной балансировки нагрузки - либо вы «объединяете» все свои соединения в центральном месте (API данных) и меньше подвержены влиянию использованияодна функция за счет большей задержки для отдельных операций, или вы объединяетесь на уровне функций, но более подвержены холодному запуску, открывая соединения при неравномерном параллелизме.

...