2017-10-25 90 views
8

Yeni bir dosya eklendiğinde veya bir SFTP sunucusunda değiştirildiğinde tetiklenen bir Azure Logic Uygulaması var. Bu olduğunda dosya Azure Blob Storage'a kopyalanır ve daha sonra SFTP sunucusundan silinir. Bu işlem, dosya başına yaklaşık 2 saniye sürer.SFTP'den Blob Storage'a bir dosya kopyalarken Azure Logic Uygulama yürütmeleri arasında parantezleme

Sahip olduğum tek sorun, bu dosyaların (ortalama 500 kb) tek tek işlenmesidir. Her gün yaklaşık 30.000 dosya aktarmayı amaçladığım için bu yaklaşım çok yavaş (18 saat civarında bir şey) oluyor.

Bu yürütmeleri ölçeklendirmek/paralelleştirmek için bir yol var mı?

+0

Şunu söylemiştiniz: "Sahip olduğum tek sorun, bu dosyaların (ortalama 500 kb üzerinde) tek tek işlenmesi." Varsayılan olarak, SFTP tetikleyicide bir bölünme ayarlanır, böylece her dosya (birden çok kişi algılanırsa) tüm dosyalar için bir çalışma yerine bir koşmayı tetikler. Bunu görmüyor musun? –

+0

@Derek Evet, her dosya ayrı bir yürütmeyi tetikler ancak yürütmeler sırayla –

+0

Bu doğru gelmiyor. Bölünmüş tetikleyiciler paralel olarak yürütülmelidir - "Teşhis" sekmesini kontrol edebilir ve "Throttled Olayları Çalıştır" ayarını alıp alamayacağınızı görebilir misiniz? Paralel koşuyor olabilirler, ancak eylemler kısıldıkları için sırayla koşuyor gibi görünüyorlar. –

cevap

0

Azure Logic Uygulaması üzerinde bir ölçeklendirme/paralelleştirme yürütme olduğundan emin değilim. güncelliği gereksinimleri çok yüksek değilse Ama deneyimlerime dayanarak, biz ForEach paralellik limiti 50 ve varsayılan Senin durumunda 20.

olduğunu, bunu yapmak için Foreach kullanabilirsiniz, benim önerim biz olabilir ki Yeni bir dosya eklendiğinde veya bir SFTP'de değiştirildiğinde tetiklemek için döngü yaptıktan sonra, depolama sırasını azure için içerik olarak dosya yoluna sahip bir kuyruk iletisi ekleyebiliriz, daha sonra döngüyü sonlandırmak için zamana veya kuyruk uzunluğuna göre ekleyebiliriz. Sıra mesajını alabiliriz. Son olarak, kuyruk mesajını alın ve foreach eyleminde blob oluşturmak için SFTP'den dosyaları getirin.

0

Eğer C# kullanıyorsanız Parallel.ForEach gibi Tom Sun dedi. Bunu kullanırsanız, IO işlemi için async/await modelini kullanmanızı öneririz (blob'a kaydet). Dosya başka bir istekte bulunmak üzere kaydedildiğinde yürütme iş parçacığını serbest bırakır.