sql >> Database teknologi >  >> RDS >> Mysql

AWS Lambda - MySQL caching

Den første ting ville være at forstå, hvordan require virker i NodeJS. Jeg anbefaler, at du gennemgår denne artikel hvis du er interesseret i at vide mere om det.

Nu, når du har krævet din forbindelse, har du den for altid, og den bliver ikke påkrævet igen. Dette matcher det, du leder efter, da du ikke ønsker at overvælde din database ved at oprette en ny forbindelse hver gang.

Men der er et problem...

Lambda koldstarter

Når du aktiverer en Lambda-funktion for første gang, vil den dreje en beholder op med din funktion indeni og holde den i live i cirka 5 minutter. Det er meget sandsynligt (selv om det ikke er garanteret), at du vil ramme den samme beholder hver gang, så længe du laver 1 anmodning ad gangen. Men hvad sker der, hvis du har 2 anmodninger på samme tid? Derefter vil en anden beholder blive spundet op parallelt med den tidligere, allerede opvarmede beholder. Du har lige oprettet endnu en forbindelse på din database, og nu har du 2 containere. Gæt nu, hvad der sker, hvis du har 3 samtidige anmodninger? Ja! En container mere, hvilket svarer til en DB-forbindelse mere.

Så længe der er nye anmodninger til dine Lambda-funktioner, vil de som standard skaleres ud for at imødekomme efterspørgslen (du kan konfigurere det i konsollen til at begrænse udførelsen til så mange samtidige udførelser, som du vil - med respekt for dine kontogrænser)

Du kan ikke sikkert sikre dig, at du har et fast antal forbindelser til din database ved blot at kræve din kode efter en funktions påkaldelse. Det gode er, at dette ikke er din skyld. Sådan opfører Lambda-funktioner sig.

...en anden tilgang er

at cache de data, du ønsker i et rigtigt cachesystem, som f.eks. ElasticCache , for eksempel. Du kan derefter få en Lambda-funktion til at blive udløst af en CloudWatch-begivenhed der kører i en bestemt frekvens. Denne funktion vil derefter forespørge i din DB og gemme resultaterne i din eksterne cache. På denne måde sikrer du dig, at din DB-forbindelse kun åbnes af én Lambda ad gangen, fordi den vil respektere CloudWatch Event, som viser sig kun at køre én gang pr. trigger.

REDIGER :efter at OP sendte et link i kommentarsektionerne, har jeg besluttet at tilføje et par mere info for at præcisere, hvad den nævnte artikel vil sige

Fra artiklen:

Og det er præcis, hvad du gør. Og det her virker! Men problemet er, hvis du har N forbindelser (Lambda Requests) på samme tid. Hvis du ikke sætter nogen grænser, kan op til 1000 Lambda-funktioner som standard roteres op samtidigt. Nu, hvis du derefter laver yderligere 1000 anmodninger samtidigt i løbet af de næste 5 minutter, er det meget sandsynligt, at du ikke åbner nogen nye forbindelser, fordi de allerede er blevet åbnet på tidligere opkald, og containerne er stadig i live.



  1. Kan jeg gendanne en enkelt tabel fra en fuld mysql mysqldump-fil?

  2. Regulært udtryk i PostgreSQL LIKE-sætning

  3. returner tæller 0 med mysql-gruppe af

  4. Sådan vælger du poster én efter én uden at gentage