2017-10-25 1 views
8

Ich habe eine Azure Logic App, die ausgelöst wird, wenn eine neue Datei in 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.Parallele Azure Logic App-Ausführungen beim Kopieren einer Datei von SFTP nach Blob Storage

Das einzige Problem, das ich habe, ist, dass diese Dateien (im Durchschnitt 500kb) nacheinander verarbeitet werden. Da ich täglich 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?

+0

Sie erwähnten: "Das einzige Problem, das ich habe, ist, dass diese Dateien (durchschnittlich 500kb) nacheinander verarbeitet werden." Standardmäßig ist eine Aufteilung auf den SFTP-Trigger festgelegt, sodass jede Datei (falls mehrere erkannt werden) einen Lauf statt eines Laufs für alle Dateien auslöst. Siehst du das nicht? –

+0

@Derek Ja, jede Datei löst eine separate Ausführung aus, aber die Ausführungen sind sequentiell. –

+0

Das klingt nicht richtig. Geteilte Trigger sollten parallel ausgeführt werden - können Sie die Registerkarte "Diagnose" überprüfen und sehen, ob Sie "Run Throttled Events" erhalten? Es könnte sein, dass sie parallel laufen, aber weil die Aktionen gedrosselt werden, sieht es so aus, als würden sie nacheinander laufen. –

Antwort

0

Ich bin mir nicht sicher, ob es eine Skalierung/Parallelisierung der Ausführung in Azure Logic App gibt. Aber auf Grund meiner Erfahrung, wenn die Aktualität Anforderungen nicht sehr hoch sind, wir Foreach verwenden könnte das zu tun, FürJeden Parallelität Grenze 50 ist und der Standardwert ist 20.

In Ihrem Fall ist mein Vorschlag, dass wir konnten do-Schleife auszulösen, 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 und 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.

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 in Blob). Es wird den ausführenden Thread freigegeben, wenn die Datei gespeichert wird, um eine andere Anfrage zu bedienen.

Verwandte Themen