sql >> Databasteknik >  >> RDS >> Mysql

AWS Lambda - MySQL-cache

Det första skulle vara att förstå hur require fungerar i NodeJS. Jag rekommenderar att du går igenom denna artikel om du är intresserad av att veta mer om det.

Nu, när du väl har krävt din anslutning, har du den för gott och den kommer inte att krävas igen. Detta matchar det du letar efter eftersom du inte vill överväldiga din databas genom att skapa en ny anslutning varje gång.

Men det finns ett problem...

Lambda kallstarter

När du anropar en Lambda-funktion för första gången kommer den att snurra upp en behållare med din funktion inuti och hålla den vid liv i cirka 5 minuter. Det är mycket troligt (även om det inte är garanterat) att du kommer att träffa samma behållare varje gång så länge du gör en begäran åt gången. Men vad händer om du har 2 förfrågningar samtidigt? Sedan kommer en annan behållare att snurras upp parallellt med den tidigare, redan uppvärmda behållaren. Du har precis skapat en annan anslutning på din databas och nu har du 2 behållare. Nu, gissa vad som händer om du har 3 samtidiga förfrågningar? ja! Ytterligare en behållare, vilket motsvarar ytterligare en DB-anslutning.

Så länge det finns nya förfrågningar till dina Lambda-funktioner kommer de som standard att skalas ut för att möta efterfrågan (du kan konfigurera den i konsolen för att begränsa exekveringen till så många samtidiga körningar som du vill - med respekt för dina kontogränser)

Du kan inte säkert se till att du har ett fast antal anslutningar till din databas genom att helt enkelt kräva din kod när en funktion anropas. Det som är bra är att detta inte är ditt fel. Så här beter sig Lambda-funktioner.

...ett annat tillvägagångssätt är

för att cache de data du vill ha i ett riktigt cachingsystem, som ElasticCache , till exempel. Du kan sedan låta en Lambda-funktion utlösas av en CloudWatch-händelse som körs med en viss frekvens. Denna funktion skulle sedan fråga din DB och lagra resultaten i din externa cache. På så sätt ser du till att din DB-anslutning endast öppnas av en lambda åt gången, eftersom den kommer att respektera CloudWatch Event, som visar sig köras endast en gång per trigger.

REDIGERA :efter att OP skickat en länk i kommentarsfälten har jag bestämt mig för att lägga till lite mer info för att förtydliga vad den nämnda artikeln vill säga

Från artikeln:

Och det är precis vad du gör. Och det här fungerar! Men problemet är om du har N anslutningar (Lambda Requests) samtidigt. Om du inte ställer in några gränser, som standard, kan upp till 1000 lambdafunktioner snurras upp samtidigt. Nu, om du sedan gör ytterligare 1000 förfrågningar samtidigt under de kommande 5 minuterna, är det mycket troligt att du inte kommer att öppna några nya anslutningar, eftersom de redan har öppnats på tidigare anrop och behållarna fortfarande lever.



  1. php while loop variabel för var tredje div

  2. Använder du namngivna instanser? Testa din DAC-anslutning!

  3. Hur dekrypterar man ett lösenord från SQL-servern?

  4. JPA:s Map<KEY, VALUE>-fråga från JPQL misslyckades