Есть ли хороший способ закрыть монго-соединения, когда истекает срок действия лямбда-контейнера? - PullRequest
1 голос
/ 04 июня 2019

Я использую AWS-лямбда-обработчик для записи потока DynamoDB в mongoDB.Я хочу определить соединение db вне обработчика, чтобы запросы повторно использовали одни и те же соединения, исходя из ожидаемой пропускной способности.Проблема с лямбда-контейнерами прекратится без правильной утилизации соединений.

Кто-нибудь знает какие-либо хорошие решения этой проблемы?По сути, сводится к тому, что «я хочу использовать пулы соединений без максимального ограничения соединения»

1 Ответ

0 голосов
/ 04 июня 2019

Когда я столкнулся с этой проблемой, я нашел два решения:

  1. «Рекомендация» - создать / закрыть подключение MongoDB для каждого вызова Lambda. Хорошая идея, если вы знаете, что Lambdas будут вызываться не так часто => ваши контейнеры Lambdas будут кричать.
  2. Повторно использовать тягу подключения - для меня это нормально, когда вы знаете, что ваша лямбда будет вызываться достаточно обычно, чтобы поддерживать (потенциально) контейнер в тепле. В этом случае вам следует установить параметр socketTimeoutMS (mongoose) достаточно, чтобы он оставался между вызовами Lambdas. Для меня это:
 { 
   reconnectTries: 30, 
   reconnectInterval: 500, 
   poolSize: 1, 
   socketTimeoutMS: 2000000, 
   keepAlive: true, 
 }

(соединение будет закрыто автоматически после истечения времени ожидания)

** К вашему сведению: любая разминка может вам не подойти, если вы используете потоки DynamoDB в качестве триггера для лямбды.

** Я уже задавал подобный вопрос здесь: AWS Lambda (Node.js, v. 8.10) и Mongoose: ошибка подключения MongoNetworkError к БД истекла

...