Azure Durable Functions扇出范围限制?

时间:2018-03-08 16:58:59

标签: azure azure-functions

我有一个持久的功能协调器,它可以扇入多个活动功能来处理一些工作负载。以下代码是一个示例,其中Function_2是扇出来处理工作负载的那个:

public static async Task Run(DurableOrchestrationContext ctx)
{
    // get a list of N work items to process in parallel
    object[] workBatch = await ctx.CallActivityAsync<object[]>("Function_1");

    var parallelTasks = new List<Task<int>>();
    for (int i = 0; i < workBatch.Length; i++)
    {
        Task<int> task = ctx.CallActivityAsync<int>("Function_2", workBatch[i]);
        parallelTasks.Add(task);
    }

    //How many instances of Function_2 will handle the workload?
    await Task.WhenAll(parallelTasks);

    // aggregate all N outputs and send result to Function_3
    int sum = parallelTasks.Sum(t => t.Result);
    await ctx.CallActivityAsync("Function_3", sum);
}

我的问题是,为了处理这项工作,会产生多少个Function_2实例。我知道这取决于任务的数量,所以假设我有5000个任务。我怀疑它会产生5000个实例,但是上限是什么,我可以控制它。我多次阅读文档,但无法找到有关此主题的信息。我知道根据定义,我不应该关心它,因为它是为我处理的,但是我的任务可以重载它们所依赖的后备资源。

1 个答案:

答案 0 :(得分:4)

在幕后,每个CallActivity调用都会成为存储队列中的消息,因此示例中会显示5000条消息。消息将由功能应用程序使用。

它将并行运行多个调用,但当然不是所有调用同时进行。您不会在文档中的任何位置看到确切的数字,因为它们将由内部比例控制器逻辑定义。它们还取决于每个活动调用的持续时间,CPU使用率等。

结果也可能随时间而改变。

所以,你的milage可能会有所不同,你应该测试你的场景。