2017-10-25 18 views
8

SFTPサーバーで新しいファイルが追加または変更されたときに起動するAzure Logic Appがあります。それが起こると、ファイルはAzure Blob Storageにコピーされ、SFTPサーバーから削除されます。この操作には、ファイルごとに約2秒かかります。Azure Logic AppをParallelizeするSFTPからBlobストレージにファイルをコピーするとき

唯一の問題は、これらのファイル(平均500kb)が1つずつ処理されることです。毎日約30,000ファイルを転送しようとしているので、このアプローチは非常に遅くなります(約18時間)。

これらの実行をスケールアウト/パラレル化する方法はありますか?

+0

あなたはこう言いました:「唯一の問題は、これらのファイル(平均500kb)が1つずつ処理されることです。デフォルトでは、SFTPトリガーにスプリットオンが設定されているため、各ファイル(複数のファイルが検出された場合)によって、すべてのファイルに対して1回の実行ではなく実行がトリガーされます。あなたはこれを見ていませんか? –

+0

@Derekはい、各ファイルは別々の実行をトリガーしますが、実行は順次です –

+0

それは正しいとは言えません。スプリットトリガは並行して実行する必要があります。「診断」タブをチェックして、「スローされたイベントを実行する」かどうかを確認できますか?それらは並行して実行されている可能性がありますが、アクションは抑制されているため、順番に実行されているように見えます。 –

答えて

0

Azure Logic Appでスケールアウト/並列化が実行されているかどうかはわかりません。しかし、私の経験に基づいて、適時性要件が非常に高くない場合は、私たちが行うForeachを使用することができのForEach並列上限は50である、ということで、デフォルトがあなたの場合は20

で、私の提案は、我々は可能性があることです新しいファイルがSFTPで追加または変更されたときにトリガするループを作成してから、ファイルパスを含むキューメッセージをコンテンツとしてazureストレージキューに挿入し、時間またはキューの長さに従ってループを終了することができます。キューメッセージコレクションを取得できました。最後に、キューメッセージを取得し、SFTPからファイルを取得して、foreachアクションでblobを作成します。

0

もしあなたがC#なら、Parallel.ForEachを使ってください。これを使用する場合は、IO操作(BLOBに保存)にasync/awaitパターンを使用することをお勧めします。ファイルが保存されているときに、実行中のスレッドを解放して、他の要求を処理します。

関連する問題