Azure 持久函数:扇出与 Parallel.ForEachAsync

Ben*_*Ben 3 c# performance azure azure-functions azure-durable-functions

我必须对项目列表运行一个函数。我正在使用 Azure Durable Functions,并且可以使用其扇出/扇入策略并行运行这些项目。

Parallel.ForEachAsync但是,我想知道这样做与在单个 Activity 函数中使用新方法之间存在什么区别。我需要使用持久函数,因为这是一个永恒的编排,在完成后会重新启动。

ric*_*sch 11

AParallel.ForEachAsync绑定到一个 Function App 实例。这意味着它与 Function App 拥有的资源绑定。在消耗计划中运行时,这意味着 1 个 vCPU。

当对 Durable Functions 使用扇出/扇入方法时,F2 的每个实例(参见图片)都是它自己的 Function App 实例。反过来,它可以使用分配给它的全部资源。

扇出/扇入

简而言之:通过扇出/扇入方法,您将使用(很多)更多资源。可能会给您更快的结果。

您可能最好将两者结合起来:将批量工作分派到“F2”,以并行方式处理批量工作。

扇出工作被分发到该F2函数的多个实例。通过使用动态任务列表来跟踪工作。Task.WhenAll被调用以等待所有被调用的函数完成。然后,F2函数输出从动态任务列表中聚合并传递给函数F3

await调用时发生的自动检查点Task.WhenAll可确保潜在的中途崩溃或重新启动不需要重新启动已完成的任务。