Parallelisieren von Azure Logic App-Ausführungen beim Kopieren einer Datei von SFTP nach Blob Storage

8

Ich habe eine Azure Logic App, die ausgelöst wird, wenn eine neue Datei auf einem SFTP-Server hinzugefügt oder geändert wird. Wenn dies geschieht, wird die Datei in Azure Blob Storage kopiert und dann vom SFTP-Server gelöscht. Dieser Vorgang dauert ungefähr 2 Sekunden pro Datei.

Das einzige Problem, das ich habe, ist, dass diese Dateien (durchschnittlich 500kb) nacheinander verarbeitet werden. Da ich täglich rund 30.000 Dateien übertragen möchte, wird dieser Ansatz sehr langsam (etwa 18 Stunden).

Gibt es eine Möglichkeit, diese Ausführungen zu skalieren / parallelisieren?

    
Florin D. Preda 25.10.2017, 17:36
quelle

2 Antworten

0

Ich bin mir nicht sicher, ob es eine Skalierung / Parallelisierung von Azure Logic App gibt. Aber basierend auf meiner Erfahrung, wenn die Aktualitätsanforderungen nicht sehr hoch sind, könnten wir Foreach , um dies zu tun, Für jede Parallelität Grenze ist 50 und der Standardwert ist 20.

In Ihrem Fall ist mein Vorschlag, dass wir eine Schleife auslösen könnten, wenn eine neue Datei in einem SFTP hinzugefügt oder geändert wird, dann könnten wir eine Warteschlangennachricht mit dem Dateipfad als Inhalt in die azurblaue Speicherwarteschlange einfügen, dann nach Zeit oder Warteschlangenlänge, um die Schleife zu beenden. Wir könnten die Warteschlangennachrichtensammlung abrufen. Abschließend holen Sie die Warteschlangennachricht und holen Sie die Dateien aus dem SFTP, um in der foreach-Aktion einen Blob zu erstellen.

    
Tom Sun 26.10.2017 05:38
quelle
0

Wenn Sie C # verwenden Parallel.ForEach wie Tom Sun sagte. Wenn Sie diesen verwenden, empfehle ich auch, async / await Muster für IO-Betrieb zu verwenden (speichern unter Klecks). Es wird den ausführenden Thread freigeben, wenn die Datei gespeichert wird, um eine andere Anfrage zu bedienen.

    
jabko87 26.10.2017 06:25
quelle