根据自定义逻辑同时处理Azure Blob存储中的多个文件

时间:2018-12-26 06:27:35

标签: azure azure-functions azure-functions-runtime azure-functions-core-tools

我的确切要求是这样的:

我的Blob存储区“ B1”中有很多文件供不同客户使用。假设客户“ C1”有10个文件,客户“ C2”有​​10个文件,客户“ C3”有10个文件。

我想对每个文件执行一些操作,然后将它们移至Blob存储“ B2”。这可能需要30秒到5分钟,具体取决于文件中的数据。

现在,我想同时为每个客户处理一个文件,但不要同时为同一个客户处理一个文件。

与客户“ C1”的一个文件一样,“ C2”的一个文件和“ C3”的一个文件必须同时处理。因此,“ C1”的处理时间不会影响“ C2”和“ C3”。 但是,只有在第一个文件完成时,才会处理C1的下一个文件。

使用Microsoft Azure功能实现此目标的最佳体系结构是什么?

例如,我已经使用Azure Function V1实现了这样的实现:

  1. Blob触发的Azure函数:只要将任何文件放入blob,它就会简单地在azure表中添加带有客户ID的文件名。该表将再包含一列“ InQueue”,默认情况下为FALSE。

  2. 时间触发的Azure函数:这将在azure表中签入,并为每个客户的所有文件均具有InQueue = FALSE的客户提取第一个文件(意思是:未处理任何文件)。然后为他们更新InQueue = TRUE并将其名称添加到天蓝色队列中。

  3. 队列触发的Azure函数:一旦任何文件位于天蓝色队列中并对其执行处理,就会立即触发该函数。该过程完成后,将从天蓝色表中删除该文件的条目。因此,现在对于该文件的客户,所有其他条目都具有“ InQueue” = FALSE(无文件正在处理)

因此,在上述架构中,时间触发的天蓝色功能正在为每个客户处理一个文件,但同时也在队列中推送来自不同客户的多个文件。而且,由于队列触发的天蓝色函数可以同时运行多个实例。不同客户的所有文件将同时执行。

我的架构好吗?还是不好?或如何改善?还有哪些其他选项可以使我的过程更快,更轻松或步骤更少?

1 个答案:

答案 0 :(得分:0)

现在让您感到困惑的主要问题是您想同时执行多项功能。如果是这样,建议您尝试使用带有并行分支的 Logic App

这是enter image description here,介绍如何创建具有并行分支的逻辑应用程序。这就是渲染。然后,您可以添加 Azure功能作为操作。 tutorial

在这里,我使用Recurrence(时间表)作为触发器,您可以使用其他触发器。在每个分支之后,您还可以向其中添加操作。就像图片所示。 enter image description here

希望这对您有帮助,如果您还有其他问题,请告诉我。