首页 > 解决方案 > 基于自定义逻辑同时处理 azure blob 存储中的多个文件

问题描述

我的确切要求是这样的:

我的 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 功能:只要任何文件在 azure 队列中并对其执行处理,就会触发此功能。该过程完成后,它将从 azure 表中删除该文件的条目。所以,现在对于该文件的客户,所有其他条目都有“InQueue”= FALSE(没有文件在处理中)

因此,在上述架构中,Time Triggered azure 函数负责为每个客户处理一个文件,但它也将不同客户的多个文件推送到队列中。并且作为队列触发的 azure 函数可以同时运行多个实例。不同客户的所有文件将同时执行。

我的架构好吗?还是不好?或者我该如何改进它?还有哪些其他选项可以使我的流程更快、更容易或步骤更少?

标签: azureazure-functionsazure-functions-runtimeazure-functions-core-tools

解决方案


现在让你感到困惑的主要问题是你想同时执行多个功能。如果是这样,我建议您尝试使用并行分支的逻辑应用程序

这是有关如何创建具有并行分支的逻辑应用的教程。这就是渲染。您可以将Azure Functions添加为操作。 在此处输入图像描述

在这里,我使用了 Recurrence(Time Schedule) 作为触发器,您可以使用其他触发器。在每个分支之后,您还可以为其添加操作。就像图片所示。 在此处输入图像描述

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


推荐阅读