sql >> Database >  >> RDS >> Mysql

AWS Lambda - MySQL-caching

Het eerste zou zijn om te begrijpen hoe require werkt in NodeJS. Ik raad je aan om deze artikel als je er meer over wilt weten.

Nu, als je eenmaal je verbinding nodig hebt, heb je deze voorgoed en zal het niet meer nodig zijn. Dit komt overeen met wat u zoekt, omdat u uw database niet wilt overbelasten door elke keer een nieuwe verbinding te maken.

Maar er is een probleem...

Lambda koude start

Telkens wanneer u een Lambda-functie voor de eerste keer aanroept, zal deze een container met uw functie erin laten draaien en deze ongeveer 5 minuten in leven houden. Het is zeer waarschijnlijk (hoewel niet gegarandeerd) dat u elke keer dezelfde container zult raken, zolang u maar 1 verzoek tegelijk doet. Maar wat gebeurt er als je 2 verzoeken tegelijk hebt? Dan wordt een andere container parallel aan de vorige, reeds opgewarmde container, rondgedraaid. Je hebt zojuist een nieuwe verbinding met je database gemaakt en nu heb je 2 containers. Raad eens wat er gebeurt als je 3 gelijktijdige verzoeken hebt? Ja! Nog een container, wat gelijk staat aan nog een DB-verbinding.

Zolang er nieuwe verzoeken zijn voor uw Lambda-functies, worden deze standaard uitgeschaald om aan de vraag te voldoen (u kunt het in de console configureren om de uitvoering te beperken tot zoveel gelijktijdige uitvoeringen als u wilt - met inachtneming van uw accountlimieten)

Je kunt er niet zeker van zijn dat je een vast aantal verbindingen met je database hebt door simpelweg vereisen uw code bij het aanroepen van een functie. Het goede ding is dat dit niet jouw schuld is. Dit is precies hoe Lambda-functies zich gedragen.

...een andere benadering is

om de gewenste gegevens in een echt cachingsysteem te cachen, zoals ElasticCache , bijvoorbeeld. U kunt dan één Lambda-functie laten activeren door een CloudWatch Event dat loopt in een bepaalde frequentie van tijd. Deze functie zou dan uw DB opvragen en de resultaten opslaan in uw externe cache. Op deze manier zorg je ervoor dat je DB-verbinding slechts door één Lambda tegelijk wordt geopend, omdat deze het CloudWatch-evenement respecteert, dat maar één keer per trigger blijkt te lopen.

BEWERKEN :nadat de OP een link in de commentaarsecties heeft gestuurd, heb ik besloten om nog een paar informatie toe te voegen om te verduidelijken wat het genoemde artikel wil zeggen

Uit het artikel:

En dit is precies wat je doet. En dit werkt! Maar het probleem is als je N-verbindingen (Lambda-verzoeken) tegelijkertijd hebt. Als u geen limieten instelt, kunnen er standaard maximaal 1000 Lambda-functies tegelijkertijd worden geactiveerd. Als u nu in de komende 5 minuten nog eens 1000 verzoeken tegelijk doet, is het zeer waarschijnlijk dat u geen nieuwe verbindingen zult openen, omdat ze al zijn geopend bij eerdere aanroepen en de containers nog steeds in leven zijn.



  1. Welke versie van MySQL is compatibel met Airflow versie 1.10?

  2. Omzet berekenen in MySQL

  3. Te veel tafels; MySQL kan slechts 61 tabellen in een join gebruiken

  4. Bespotten van een MySQL-database in Python