Wie kann ich Skalierungsprobleme mit Serverless und MongoDB überwinden?

Nov 29 2020

Ich bin mit Serverless und MongoDB vertraut und möchte wissen, ob es skalierbare Möglichkeiten gibt, die beiden Welten zu verbinden. Soweit ich weiß, können Sie nicht auf ruhige Weise mit MongoDB interagieren. Öffnen Sie stattdessen eine Verbindung, die wiederverwendet werden soll.

Angenommen, ich verwende AWS Lambda als Teil einer serverlosen API. Wenn das Lambda kalt ist, müssen Sie eine neue Verbindung zu MongoDB herstellen, und solange das Lambda noch heiß ist, bleibt die Verbindung offen. Diese Lösung ist in Ordnung, aber wenn Sie einen Anstieg des Datenverkehrs auf der API haben, werden Sie ein von MongoDB auferlegtes Verbindungslimit erreichen.

Gibt es eine Möglichkeit, diese Verbindungsgrenze in einer staatenlosen Welt wie Lambda zu überwinden?

Antworten

AtulSharma Nov 29 2020 at 15:13

Lambda-Funktionen sind zustandslos und asynchron. Wenn Sie den Datenbankverbindungspool verwenden, fügen Sie ihm einen Status hinzu und vereiteln den Zweck.

Wenn Sie ein Verbindungspooling wünschen, ist die Ausführung Ihres Servers über EC2 die beste Option unter AWS.

Wenn Sie jedoch weiterhin ein Verbindungspooling mit Lambda wünschen, können Sie einen Pool erstellen, der normalerweise verwendet wird, MongoClient.connect(uri, { poolSize: 10 })und Ihr Lambda mithilfe von Cloud-Watch-Ereignissen warm halten, indem Sie einen Dummy-Trigger erstellen.

Sie werden auf jeden Fall eine Leistungsverbesserung feststellen.

ServerlessChamp Nov 29 2020 at 15:15

Die Idee, an die Sie denken sollten: Sie können Kinesis verwenden, um Lambda auszulösen. Dadurch wird die Anzahl der gleichzeitigen Ausführungen auf die Anzahl der Shards begrenzt, z. B. 8 Shards für 8 gleichzeitig.

Auf diese Weise können Sie Ihre Verbindung offen halten und ein Limit Ihrer offenen Verbindung verdienen, um Skalierungsprobleme zu vermeiden.

Diese Art von Dingen (für einen einzelnen Aufruf, unabhängig davon, ob die Verbindung neu ist oder wiederverwendet wird) können Sie mit einigen Überwachungstools überwachen, mit denen Sie den Skalierungsstatus über einen längeren Zeitraum beibehalten und das Alter des MongoDB- und Kinesis-Iterators verwalten können. Sowie:

  • AWS X-Ray
  • AWS Cloudwatch-Metriken
  • Datadog
  • Lumigo

Als Offenlegung arbeite ich für ein Unternehmen namens Lumigo. Wir haben ein verteiltes Überwachungstool, mit dem Sie Ihre Probleme mit der Produktionsskalierung verfolgen können