Es ist bekannt, dass AWS Lambda kann Wiederverwendung frühen Objekte von Handler erstellt, und es wirklich funktioniert es (siehe FAQ):AWS Lambda und Java Concurrency
F: Wird AWS Lambda Wiederverwendung Funktion Instanzen?
Leistung zu verbessern, können AWS Lambda wählen Sie eine Instanz von Ihre Funktion zu behalten und wiederverwenden es eine nachfolgende Anforderung zu dienen, anstatt eine neue Kopie zu erstellen. Dein Code sollte nicht davon ausgehen, dass dies immer passieren wird.
Die Frage ist in Bezug auf Java
Gleichzeitigkeit. Wenn ich Klasse für Handler haben, sagen:
public class MyHandler {
private Foo foo;
public void handler(Map<String,String> request, Context context) {
...
}
}
so wird es für Thread-sicher zugänglich sein und foo
hier mit Objektvariablen arbeiten oder nicht?
Mit anderen Worten: darf AWS Lambda dasselbe Objekt gleichzeitig für verschiedene Aufrufe verwenden?
BEARBEITEN Meine Funktion wird auf ereignisbasierter Quelle verarbeitet, insbesondere wird sie von der API-Gateway-Methode aufgerufen.
EDIT-2 Eine solche Frage erhebt sich, wenn Sie eine Art Verbindungspool zu externen Ressourcen implementieren möchten, also möchte ich die Verbindung zu externen Ressourcen als Objektvariable beibehalten. Es funktioniert tatsächlich wie gewünscht, aber ich habe Angst vor Nebenläufigkeitsproblemen.
EDIT-3 Genauer gesagt frage ich mich: können Instanzen der Handler von AWS Lambda-Anteil gemeinsamen Heap (Speicher) oder nicht? Ich muss dieses zusätzliche Detail spezifizieren, um Antworten mit der Auflistung von offensichtlichen und allgemein bekannten Dingen über Java thread-safe Objekte zu verhindern.
IMO „eine Instanz Ihrer Funktion behalten und wiederverwenden“ genau wie „verwenden gleiches Objekt“ ist das gleiche. Und sehr wahrscheinlich gleichzeitig. – zapl
@zapl Es bedeutet nicht genau gleichzeitig. Es kann wie Threads innerhalb Java verwendet werden 'ExecutorService' - sie werden beibehalten, aber nicht gleichzeitig – Andremoniy
sicher verwendet werden, könnten sie neue Handler Instanzen pro Thread erstellen oder sicherzustellen, sonst werden sie nicht gleichzeitig verwendet, aber ich sehe es nicht explizit irgendwo erwähnt. Auf der anderen Seite gibt es Stücke wie * "Der Code muss in einem" statuslosen "Stil geschrieben sein [...] Artefakte dürfen nicht über die Lebensdauer der Anfrage hinausreichen" * in den FAQ. – zapl