Comment puis-je surmonter les problèmes de mise à l'échelle avec le serveur sans serveur et MongoDB?

Nov 29 2020

Je connais le serveur sans serveur et MongoDB et j'aimerais savoir s'il existe des moyens évolutifs de connecter les deux mondes. Pour autant que je sache, vous ne pouvez pas interagir avec MongoDB de manière REST. Au lieu de cela, ouvrir une connexion qui est censée être réutilisée.

Disons que j'utilise AWS Lambda dans le cadre d'une API sans serveur. Lorsque le lambda est froid, vous devez ouvrir une nouvelle connexion à MongoDB et tant que le lambda est encore chaud, la connexion reste ouverte. Cette solution est bonne, mais lorsque vous avez une augmentation du trafic sur l'API, vous atteignez une limite de connexion imposée par MongoDB.

Existe-t-il un moyen de surmonter cette limite de connexion dans un monde sans état tel que lambda?

Réponses

AtulSharma Nov 29 2020 at 15:13

Les fonctions Lambda sont sans état et asynchrones, et en utilisant le pool de connexions à la base de données, vous y ajouterez un état, et vous en échouerez.

Si vous souhaitez un regroupement de connexions, l'exécution de votre serveur sur EC2 est la meilleure option appropriée sur AWS.

Cependant, si vous souhaitez toujours un pool de connexions avec lambda, vous pouvez créer un pool normalement en utilisant MongoClient.connect(uri, { poolSize: 10 })et maintenir votre lambda au chaud à l'aide d'événements cloud-watch en créant un déclencheur factice.

Vous verrez certainement une amélioration des performances.

ServerlessChamp Nov 29 2020 at 15:15

L'idée à laquelle penser: vous pouvez utiliser Kinesis pour déclencher votre Lambda, cela limitera le nombre d'exécutions simultanées au nombre de fragments, par exemple, 8 fragments pour 8 simultanément.

De cette façon, vous pouvez garder votre connexion ouverte et gagner une limite de votre connexion ouverte pour éviter les problèmes de mise à l'échelle.

Ce type de chose (pour une seule invocation, que la connexion soit nouvelle ou réutilisée), vous pouvez surveiller par certains outils de surveillance qui vous aideront à vous maintenir à l'échelle de l'état au fil du temps, cela aidera à gérer l'âge des itérateurs MongoDB et Kinesis. Tel que:

  • AWS X-Ray
  • Métriques AWS Cloudwatch
  • Datadog
  • Lumigo

En tant que divulgation, je travaille pour une entreprise appelée Lumigo, nous avons un outil de surveillance distribué qui peut vous aider à suivre vos problèmes de mise à l'échelle de la production