Mysql
 sql >> Datenbank >  >> RDS >> Mysql

AWS Lambda – MySQL-Caching

Das Erste wäre, zu verstehen, wie require funktioniert in NodeJS. Ich empfehle Ihnen, diesen Artikel wenn Sie daran interessiert sind, mehr darüber zu erfahren.

Sobald Sie Ihre Verbindung einmal benötigt haben, haben Sie sie für immer und sie wird nicht erneut benötigt. Dies entspricht dem, wonach Sie suchen, da Sie Ihre Datenbank nicht überlasten möchten, indem Sie jedes Mal eine neue Verbindung erstellen.

Aber es gibt ein Problem...

Lambda-Kaltstart

Wenn Sie zum ersten Mal eine Lambda-Funktion aufrufen, wird ein Container mit Ihrer darin enthaltenen Funktion hochgefahren und für etwa 5 Minuten am Leben erhalten. Es ist sehr wahrscheinlich (aber nicht garantiert), dass Sie jedes Mal denselben Container treffen, solange Sie jeweils nur eine Anfrage stellen. Aber was passiert, wenn Sie 2 Anfragen gleichzeitig haben? Dann wird ein weiterer Behälter parallel zum vorherigen, bereits aufgewärmten Behälter geschleudert. Sie haben gerade eine weitere Verbindung zu Ihrer Datenbank erstellt und haben jetzt 2 Container. Ratet mal, was passiert, wenn Sie 3 gleichzeitige Anfragen haben? Ja! Ein weiterer Container, der einer weiteren DB-Verbindung entspricht.

Solange es neue Anfragen an Ihre Lambda-Funktionen gibt, werden sie standardmäßig skaliert, um den Bedarf zu decken (Sie können es in der Konsole konfigurieren, um die Ausführung auf so viele gleichzeitige Ausführungen zu beschränken, wie Sie möchten – unter Berücksichtigung Ihrer Kontolimits)

Sie können nicht sicher sicherstellen, dass Sie eine feste Anzahl von Verbindungen zu Ihrer Datenbank haben, indem Sie einfach erfordern Ihren Code beim Aufruf einer Funktion. Das Gute ist, dass dies nicht Ihre Schuld ist. Genau so verhalten sich Lambda-Funktionen.

...ein anderer Ansatz ist

um die gewünschten Daten in einem echten Caching-System wie ElasticCache zwischenzuspeichern , zum Beispiel. Sie könnten dann eine Lambda-Funktion durch ein CloudWatch-Ereignis die in einer bestimmten Frequenz läuft. Diese Funktion würde dann Ihre Datenbank abfragen und die Ergebnisse in Ihrem externen Cache speichern. Auf diese Weise stellen Sie sicher, dass Ihre DB-Verbindung jeweils nur von einem Lambda geöffnet wird, da es das CloudWatch-Ereignis respektiert, das nur einmal pro Trigger ausgeführt wird.

BEARBEITEN :Nachdem das OP einen Link in den Kommentarabschnitten gesendet hat, habe ich beschlossen, ein paar weitere Informationen hinzuzufügen, um zu verdeutlichen, was der erwähnte Artikel sagen möchte

Aus dem Artikel:

Und genau das tust du. Und das funktioniert! Aber das Problem ist, wenn Sie gleichzeitig N Verbindungen (Lambda Requests) haben. Wenn Sie keine Limits festlegen, können standardmäßig bis zu 1000 Lambda-Funktionen gleichzeitig ausgeführt werden. Wenn Sie nun in den nächsten 5 Minuten weitere 1000 Anfragen gleichzeitig stellen, werden Sie höchstwahrscheinlich keine neuen Verbindungen öffnen, da diese bereits bei früheren Aufrufen geöffnet wurden und die Container noch am Leben sind.