Как я могу решить проблемы масштабирования с использованием бессерверной базы данных и MongoDB?

Nov 29 2020

Я знаком с serverless и MongoDB и хотел бы знать, есть ли какие-либо масштабируемые способы соединения этих двух миров. Насколько мне известно, вы не можете взаимодействовать с MongoDB в стиле RESTful. Вместо этого открытие соединения, которое предполагается использовать повторно.

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

Есть ли способ преодолеть это ограничение на количество подключений в мире без гражданства, таком как лямбда?

Ответы

AtulSharma Nov 29 2020 at 15:13

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

Если вам нужен пул соединений, запуск вашего сервера через EC2 - лучший подходящий вариант на AWS.

Однако, если вам по-прежнему нужен пул соединений с лямбда-выражением, вы можете создать пул, который обычно используется, MongoClient.connect(uri, { poolSize: 10 })и поддерживать его в тепле, используя события облачного наблюдения, создав фиктивный триггер.

Вы обязательно заметите улучшение производительности.

ServerlessChamp Nov 29 2020 at 15:15

Идея для размышления: вы можете использовать Kinesis для запуска Lambda. Это ограничит количество одновременных выполнений количеством шардов, например, 8 шардов на 8 одновременно.

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

Этот тип вещей (для одного вызова, независимо от того, является ли соединение новым или повторно используемым) вы можете отслеживать с помощью некоторых инструментов мониторинга, которые помогут вам поддерживать статус масштабирования с течением времени, это поможет управлять возрастом итератора MongoDB и Kinesis. Такие как:

  • AWS X-Ray
  • Метрики AWS Cloudwatch
  • Датадог
  • Лумиго

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