我有一个Azure Logic应用程序,当在SFTP服务器中添加或修改新文件时会触发该应用程序。发生这种情况时,文件将复制到Azure Blob存储,然后从SFTP服务器中删除。此操作每个文件大约需要2秒钟。
我唯一的问题是这些文件(平均500kb)是逐个处理的。鉴于我每天要传输大约30,000个文件,这种方法变得非常缓慢(大约18个小时)。
有没有办法扩展/并行化这些执行?
答案 0 :(得分:0)
我不确定Azure Logic App上是否存在扩展/并行执行。但根据我的经验,如果时效性要求不是很高,我们可以使用Foreach来做到这一点, ForEach parallelism 限制为50,默认值为20.
在你的情况下,我的建议是我们可以在SFTP中添加或修改新文件时执行循环触发,然后我们可以插入带有文件路径的队列消息作为内容到azure存储队列,然后根据时间或队列长度以结束循环。我们可以获得队列消息集合。最后,获取队列消息并从SFTP获取文件以在foreach操作中创建blob。
答案 1 :(得分:0)
如果你是C#,请使用Parallel.ForEach,就像Tom Sun所说的那样。如果你使用这个,我还建议使用async/await模式进行IO操作(保存到blob)。它将在保存文件时释放执行线程以提供其他请求。