1

Ich habe einen DynamoDB-Stream, der eine Lambda-Funktion auslöst. Ich bemerke, dass Bursts von tausend Schreibvorgängen in der DynamoDB-Tabelle viele Minuten dauern können (am längsten habe ich 30 Minuten gesehen), um von Lambda verarbeitet zu werden. Die durchschnittliche Dauer für jeden Lambda-Aufruf mit einer Stapelgröße von 3 beträgt etwa 2 Sekunden. Diese Lambdas führen E/A-schwere Tasks aus, so dass eine kleine Batch-Größe und eine höhere Anzahl von parallelen Aufrufen vorteilhaft ist. Die Parallelität dieser Lambdas ist jedoch an die Anzahl der DynamoDB Stream-Shards gebunden, aber ich kann keine Methode finden, um die Anzahl der Shards zu skalieren.DynamoDB Stream + Lambda-Durchsatz erhöhen

Gibt es eine Möglichkeit, den Durchsatz dieser Lambdas zu erhöhen, anstatt eine größere Batchgröße und einen optimierten Code zu verwenden?

Antwort

1

Jeder Stream-Shard ist einer Partition in DynamoDB zugeordnet. Wenn Sie den Durchsatz auf Ihrem Tisch so stark erhöhen, dass Sie Ihre partitions to split verursachen, erhalten Sie weitere Shards. Bei mehreren Shards erhöht sich die Anzahl der parallel laufenden Lambda-Funktionen.

+0

Können Sie einen Link zu einem Dokument hinzufügen, das folgende Informationen enthält: "Jeder Stream-Shard gehört zu einer Partition in DynamoDB"? Ich kämpfe darum, es zu finden. –

+0

[This] (https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html) ist der Kinesis-Stream, aber ich bin mir nicht sicher, ob sie gleich oder ähnlich sind. Jemand sagte, dass Lambda den Kinesis-Stream-Client in Ihrem Namen verwenden wird. – HenryLok

1

Ich sehe auch nicht viel Konfigurationsoptionen.

Sie könnten Ihre Verarbeitung entkoppeln. Wenn Ihre Änderungsdatensätze nicht zu groß sind, könnte Ihr eingehendes Lambda diese in mehrere kleinere SNS-Nachrichten aufteilen. Jede dieser kleineren SNS-Nachrichten könnte dann ein Lambda auslösen, das die tatsächliche Verarbeitung vornimmt. Wenn die Änderungen größer sind, können Sie SQS oder S3 verwenden und die Lambda-Verarbeitung für neue Nachrichten über SNS oder direkt für Dateien auslösen.