3

Ich habe kürzlich mit Lambda gespielt und arbeite an der Erstellung einer API mit API Gateway und Lambda. Ich habe eine Lambda-Funktion, die einen JSON- und einen API-Gateway-Endpunkt zurückgibt, der die Funktion aufruft. Mit dieser einfachen Einrichtung funktioniert alles gut.AWS Lambda - sync vs async

Ich habe versucht, den API-Gateway-Endpunkt mit dem loadtest npm-Modul zu testen. Während Lambda die gleichzeitigen Anfragen verarbeitet (wenn auch mit einer Zunahme der mittleren Latenz im Laufe der Ausführung), beginnt es, wenn ich es 40 Anfragen pro Sekunde sende, Fehler zu werfen, die Anfragen nur teilweise abschließend.

Ich lese in der Dokumentation, dass Lambda-Aufruf vom Typ RequestResponse ist (was die API gerade tut), die von Natur aus synchron ist, und es sieht so aus, als wäre sie nicht blockierend. Bei asynchronem Aufruf ist der Aufruftyp Ereignis. Aber lambda verwirft den Rückgabetyp für asynchrone Aufrufe und die API gibt nichts zurück.

Gibt es etwas, das mir fehlt, entweder mit den Syn- chron-, Async- oder Concurrency-Definitionen in Bezug auf AWS? Gibt es einen besseren Weg, dieses Problem anzugehen? Jeder Einblick ist hilfreich. Vielen Dank!

Antwort

2

Sie müssen die synchrone Ausführung verwenden, wenn Sie eine Rückgabeantwort von API Gateway erhalten möchten. In diesem Szenario ist es nicht sinnvoll, die Async-Ausführung zu verwenden. Ich denke, was Sie vermissen ist, dass, während jede Lambda-Ausführung blockiert, single threaded, es mehrere Instanzen Ihrer Funktion gibt, die in mehreren Lambda-Server-Umgebungen laufen.

Die Standardanzahl gleichzeitiger Lambda-Ausführungen ist aus Sicherheitsgründen relativ niedrig. Dies soll verhindern, dass Sie versehentlich einen weglaufenden Lambda-Prozess schreiben, der viel Geld kosten würde, während Sie noch etwas über Lambda lernen. Sie müssen request an increase im Limit für gleichzeitige Ausführung von Lambda in Ihrem Konto angeben.

+0

Ausgezeichnet! Das war, was ich bisher gesammelt hatte, aber die Dokumentation schien etwas zweideutig. Ich habe bemerkt, dass bei höherer Parallelität (ich habe es auf 40 erhöht) die mittlere Latenz zugenommen hat. Ist das nur so, weil wir unter der Schwelle von 100 gleichzeitig arbeiten, wie Sie erwähnt haben? Für eine höhere angeforderte Nebenläufigkeit sollte die Geschwindigkeit besser werden? (Ich hatte eine ähnliche Erfahrung mit Speicher auf einer Lambda-Funktion. 128megs nicht schneiden - durchschnittliche Latenz war etwa 6 Sekunden. Erhöhung des Speichers auf 512 brachte es auf 800ms.) – user3830673

+0

Ja, sobald Sie dieses Limit erhöhen sollten Sie sein in der Lage, höhere Nebenläufigkeit ohne Latenz zu erreichen. Ich würde gerne hören, ob das gut für Sie funktioniert, nachdem Ihr Limit erhöht wurde. –

+0

Sie können auch prüfen, ob das Zwischenspeichern in API Gateway für eine erhöhte Leistung wiederholter Anforderungen aktiviert werden soll. Außerdem sollten Sie sicherstellen, dass die Einstellungen für die Ratenbegrenzung in API Gateway die Anzahl gleichzeitiger Anfragen nicht unterhalb der Ebene einschränken, die Sie unterstützen möchten. –