Am letzten Tag der re:Invent 2022 gab es noch einige schöne Gespräche über die neu veröffentlichten Funktionen. Diese ist eine Erweiterung des bestehenden Map-Schritts, über den StepFunctions bereits verfügt.
Warum
Der vorhandene Map-Schritt hat einige Einschränkungen in Bezug auf die Größe der Ein-/Ausgabe (256KB), die Protokollierung der Ausführungshistorie (25000) und die Parallelität (max. 40). Er ist gut genug, um kleinere Aufgaben parallel auszuführen. Wenn Sie größere Aufgaben ausführen möchten, können Sie natürlich S3 als Speicher verwenden und das Laden und Speichern von Daten selbst in der/den Lambda-Funktion(en) implementieren, aber da dies ein recht gängiges Muster ist, hat AWS beschlossen, die Funktionalität des Map-Schritts zu erweitern.
Was
Bei Verwendung des neuen verteilten Verarbeitungsmodus können Sie eine S3-Quelle angeben (entweder eine Datei, Objekte mit einem Präfix oder den gesamten Bucket). Die Interna des Map-Schrittes werden dann als separater Workflow behandelt. Zu Beginn der Ausführung der übergeordneten StepFunction werden die Informationen aus S3 mit Hilfe von ListObjectsV2 gesammelt und dann wird die untergeordnete StepFunction unter Verwendung der von Ihnen angegebenen Parallelisierung und Stapelverarbeitung aufgerufen. Alle Attribute aus ListObjectsV2 werden an die untergeordnete StepFunction übergeben. Die maximale Parallelität wird auf bis zu 10000 parallele Ausführungen der untergeordneten StepFunction erhöht. Die Eingabe- und Ausgabebeschränkungen gibt es nicht mehr. Und da die innere StepFunction ihre eigene Ausführungshistorie hat, wird auch diese Einschränkung gemildert.
Andere Quellen als S3
Andere Quellen werden derzeit nicht unterstützt. Um andere Quellen zu verwenden, müssen Sie einige Schritte in der übergeordneten StepFunction einrichten, um einige S3-Objekte für die Verwendung als Eingabe vorzubereiten.
Eigenschaften
Da die Anzahl der Ausführungen sehr groß sein kann, können Sie eine Fehlerschwelle festlegen. Wenn die Anzahl der Fehler unter dem Schwellenwert liegt, ist der Map-Schritt dennoch erfolgreich. Im Map-Schritt können Sie auch einen Exportort in S3 angeben. Die Ergebnisse der Ausführung des Map-Schritts werden dort gemeldet (manifest.json, Succeeded.json, Failed.json, Pending.json). Sie können einen Schritt nach dem Map-Schritt in der übergeordneten StepFunction verwenden, um diese Ausgabedateien zu dem von Ihnen gewünschten Ergebnis zu verarbeiten. In der Konsole können Sie den Fortschritt Ihres verteilten Map-Schritts verfolgen.
Anwendungsfälle
Wenn Sie Map-Reduce-ähnliche Operationen mit großen Datenmengen durchführen, kann dies eine sehr gute Architektur sein. Sie benötigen keine Spark- oder Haddoop-Instanzen, sondern eine vollständig serverlose Lösung.
Um ein Gefühl für die Größe der Arbeitslast zu bekommen, die Sie mit dieser Funktion verarbeiten können. In der Demo präsentierte AWS einen Fall, in dem über 500000 S3-Objekte in Stapeln von 250 Objekten mit einer Parallelisierung von 3000 parallelen Lambda-Ausführungen verarbeitet wurden, wobei jedes Lambda 16 Sekunden für die Verarbeitung benötigte. Die Gesamtausführungszeit betrug weniger als 2:30 Minuten.
Verfasst von

Jacco Kulman
Jacco is a Cloud Consultant at Binx.io. As an experienced development team lead he coded for the banking- and hospitality- and media-industries. He is a big fan of serverless architectures. In his free time he reads science fiction, contributes to open source projects and enjoys being a life-long-learner.
Unsere Ideen
Weitere Blogs
Contact




