2017-10-25 44 views
8

Mam aplikację Azure Logic, która uruchamia się, gdy nowy plik zostanie dodany lub zmodyfikowany na serwerze SFTP. Gdy tak się stanie, plik zostanie skopiowany do magazynu Azure Blob, a następnie zostanie usunięty z serwera SFTP. Ta operacja trwa około 2 sekund na plik.Równoległe wykonywanie aplikacji platformy Azure Logic podczas kopiowania pliku z SFTP do magazynu Blob

Jedyny problem jaki mam to to, że te pliki (średnio 500kb) są przetwarzane jeden po drugim. Biorąc pod uwagę, że chcę codziennie przesyłać około 30 000 plików, podejście to staje się bardzo powolne (trwa około 18 godzin).

Czy istnieje sposób na skalowanie/równoległość tych egzekucji?

+0

Wspomniałeś: "Jedyny problem jaki mam to to, że te pliki (średnio 500kb) są przetwarzane jeden po drugim." Domyślnie podział jest ustawiony na wyzwalacz SFTP, więc każdy plik (jeśli wykryto wiele) wyzwoli uruchomienie zamiast jednego uruchomienia dla wszystkich plików. Nie widzisz tego? –

+0

@Derek Tak, każdy plik wyzwala oddzielne wykonanie, ale wykonanie jest sekwencyjne –

+0

To nie brzmi dobrze. Podzielone wyzwalacze powinny być wykonywane równolegle - czy możesz sprawdzić zakładkę "Diagnostyka" i sprawdzić, czy otrzymujesz "Zdarzenie z zatrzymanym przebiegiem"? Możliwe, że działają równolegle, ale ponieważ działania są dławione, wygląda na to, że działają one sekwencyjnie. –

Odpowiedz

0

Nie jestem pewien, czy w aplikacji Azure Logic jest wykonywane skalowanie/równoległe wykonywanie. Ale na podstawie mojego doświadczenia, jeśli wymagania dotyczące terminowości nie są bardzo wysokie, możemy użyć Foreach to zrobić, ForEach równoległość limit wynosi 50, a wartość domyślna to 20.

W twoim przypadku, moja propozycja jest taka, że ​​mogliśmy Pętla uruchamia się, gdy nowy plik jest dodawany lub modyfikowany w SFTP, a następnie możemy wstawić komunikat kolejki ze ścieżką do pliku jako zawartość do kolejki pamięci masowej, a następnie odpowiednio do czasu lub długości kolejki, aby zakończyć pętlę. Możemy pobrać kolekcję wiadomości kolejki. Na koniec pobierz wiadomość kolejki i pobierz pliki z SFTP, aby utworzyć obiekt blob w akcji foreach.

0

Jeśli używasz C# w Parallel.ForEach, jak powiedział Tom Sun. Jeśli używasz tego, zalecam również użycie wzoru async/await dla operacji we/wy (zapisz na blob). Spowoduje to zwolnienie wątku wykonującego, gdy plik jest zapisywany, aby spełnić inne żądanie.