2016-05-30 4 views
6

Ich habe bereits durch this Link gegangen, (es wurde im Dezember 2014 veröffentlicht), auch bezeichnet this und thisWie funktioniert die Wiederverwendung von AWS Lambda-Containern?

Wie die AWS Lambda Behälter Wiederverwendung arbeitet als im Mai 2016, können Sie alle spezifischen Link teilen Sie bitte die erzählt in Details? Im Folgenden habe ich einige Fragen rund um diese AWS Lambda-Container-Wiederverwendung.

Betrachten wir ein Anwendungsfall:

A Lambda Funktionsname "processMessageLambda" empfängt Anforderung, wenn sie eine Nachricht zu verarbeiten hat, und das Nachricht empfängt es von der API POST REST (von AWS API-Gateway, wie dies Lambda-Funktion verbunden mit).

Jetzt diese 'processMessageLambda' die Nachricht verarbeiten und in der Datenbank speichern.

So logisch tut es Folgendes: Verbindung zur Datenbank, speichern Sie die Nachricht und die Verbindung herunterfahren. (Es funktioniert im Normalfall gut.).

Wenn Anfragen ankommen - 10 pro Sekunde, und jede Lambda-Funktion 30 Sekunden dauert, dann werden tatsächlich viele Datenbankverbindungen geöffnet.

Q1: Dürfen wir in diesem Fall "Verbindungspooling" verwenden (z. B. boneCP)? wie viele Anrufe zu "processMessageLambda" wären wie hundert pro Sekunde oder zehn pro Sekunde?

(siehe: simple example of container reuse - Es funktioniert wie es sagt, aber was viele Anfrage passieren wird ankommen würde sagen - 10 Anfrage pro Sekunde)

Q-2: Wenn sein möglich, die Verbindungs-Pooling zu verwenden, dann wie würde dieser aws lambda container wiederverwendet?

Wenn ein Fall betrachtet:

Läßt die Ansicht, dass durch diese Lambda-Funktion empfangen fordert zehn pro Sekunde in diesem Fall - 10 verschiedene Behälter dieser Lambda-Funktion erzeugt werden würden oder einzelne Behälter der Lambda-Funktion entstünden und das würde mit all diesen 10 Anfragen verwendet werden?

Q-3: Wenn 10 verschiedene Container der Lambda-Funktion erstellt würden, dann würden 10 Datenbankverbindungen verwendet werden, so dass diese 10 Container für weitere Anfragen wiederverwendet würden?

Q-4: Darf ich Ihnen bitte aus Entwicklersicht erklären, wie es tatsächlich funktioniert, dass ein Lambda-Container wiederverwendet wird oder wie ein Entwickler darüber nachdenkt, während der aws Lambda-Container wiederverwendet wird?

Q-5: Wenn die Wiederverwendung von Containern bereits vorhanden ist, Wie muss ein Entwickler den Status von Variablen beibehalten, damit ein Entwickler weiß, welche Variable wiederverwendet wird?

Antwort

8

Ich baue und pflege mehrere serverlose Anwendungen. Eine Sache, an die ich mich erinnern kann, die mir hilft: zwei Lambda-Funktionen leben in verschiedenen Universen. Dies beantwortet sofort ein paar Fragen:

1: Nein, Sie können nur Verbindungspooling pro Lambda tun. Wenn Sie 100 Lambda-Funktionen auslösen, haben Sie 100 Verbindungen.

2: -

3: Der genaue Algorithmus hinter Behälter wiederverwendet wird nicht angegeben. Die nächsten Anfragen können einen vorhandenen Container oder einen neuen Container verwenden. Es gibt keine Möglichkeit zu sagen. Lesen Sie this Blog-Post für weitere Informationen.

4: Der beste Weg imo ist, darüber nachzudenken, dass Container überhaupt nicht wiederverwendet werden, mit der zusätzlichen Regel, immer eindeutige (zufällige) Dateinamen im Scratch Space zu verwenden, wenn Sie sie brauchen (der Ordner/tmp) . Als ich versuchte, die Verbindung zur Wiederverwendung offen zu halten, endete die Verbindung und THEN wurde wieder verwendet. Dies führte zu Datenbankverbindungsproblemen. Jetzt öffne und schließe ich einfach während jeder Invokation.

5: Halten Sie Ihren Code statuslos (außer Module, verwenden Sie niemals globale Variablen) und verwenden Sie immer einen eindeutigen (zufälligen) Namen, wenn Sie Dateien im Arbeitsspeicherbereich speichern müssen. Diese zwei allgemeinen Faustregeln retten mich vor vielen Problemen.

+0

stimmte mit Ihrer Antwort überein. –

+0

Alle guten Ratschläge. Dennoch bin ich gespannt, ob der gleiche Container jemals verwendet wird, um zwei Lambda-Anfragen gleichzeitig zu lösen. –

+0

Zur genau gleichen Zeit: nein. Der Container kann nur wiederverwendet werden, wenn er gerade nicht ausgeführt wird. –

Verwandte Themen