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

AWS Lambda - Memorizzazione nella cache MySQL

La prima cosa sarebbe capire come require funziona in NodeJS. Ti consiglio di seguire questo articolo se sei interessato a saperne di più.

Ora, una volta che hai richiesto la tua connessione, l'hai per sempre e non sarà più richiesta. Questo corrisponde a ciò che stai cercando perché non vuoi sovraccaricare il tuo database creando una nuova connessione ogni volta.

Ma c'è un problema...

Lambda partenze a freddo

Ogni volta che invochi una funzione Lambda per la prima volta, girerà un contenitore con la tua funzione al suo interno e lo manterrà attivo per circa 5 minuti. È molto probabile (sebbene non garantito) che colpirai lo stesso contenitore ogni volta, purché tu faccia 1 richiesta alla volta. Ma cosa succede se hai 2 richieste contemporaneamente? Quindi un altro contenitore verrà centrifugato in parallelo con il precedente contenitore già riscaldato. Hai appena creato un'altra connessione sul tuo database e ora hai 2 contenitori. Ora, indovina cosa succede se hai 3 richieste simultanee? Sì! Un contenitore in più, che equivale a un'altra connessione DB.

Finché ci sono nuove richieste alle tue funzioni Lambda, per impostazione predefinita, verranno ridimensionate per soddisfare la domanda (puoi configurarla nella console per limitare l'esecuzione a tutte le esecuzioni simultanee che desideri, rispettando i limiti del tuo account)

Non puoi assicurarti di avere una quantità fissa di connessioni al tuo database semplicemente richiedendo il tuo codice all'invocazione di una funzione. La cosa buona è che non è colpa tua. Ecco come si comportano le funzioni Lambda.

...un altro approccio è

per memorizzare nella cache i dati desiderati in un vero sistema di memorizzazione nella cache, come ElasticCache , Per esempio. Potresti quindi fare in modo che una funzione Lambda venga attivata da un evento CloudWatch che scorre in una certa frequenza di tempo. Questa funzione interrogherebbe quindi il tuo DB e memorizzerebbe i risultati nella tua cache esterna. In questo modo ti assicuri che la tua connessione DB venga aperta solo da un Lambda alla volta, perché rispetterà l'evento CloudWatch, che risulta essere eseguito solo una volta per trigger.

MODIFICA :dopo che l'OP ha inviato un link nelle sezioni dei commenti, ho deciso di aggiungere qualche informazione in più per chiarire cosa vuole dire l'articolo citato

Dall'articolo:

E questo è esattamente quello che stai facendo. E questo funziona! Ma il problema è se hai N connessioni (Richieste Lambda) contemporaneamente. Se non imposti alcun limite, per impostazione predefinita, è possibile avviare contemporaneamente fino a 1000 funzioni Lambda. Ora, se poi fai altre 1000 richieste contemporaneamente nei prossimi 5 minuti, è molto probabile che non aprirai nuove connessioni, perché sono già state aperte su invocazioni precedenti e i contenitori sono ancora attivi.