持久功能是否适合大量活动?

时间:2019-12-09 12:33:09

标签: azure-functions azure-durable-functions

我有一个需要计算50万活动的场景。所有小的计算。由于节流,我只能同时计算30。

想象下面的简单示例:

[FunctionName("Crawl")]
public static async Task<List<string>> RunOrchestrator(
    [OrchestrationTrigger] DurableOrchestrationContext context)
{  
    WriteLine("In orchistration");
    var outputs = new List<string>();

    // here i get 1 million jobs
    var jobs = await context.CallActivityAsync<List<Influencer>>("GetSocialAccountJobs", "");
    var tasks = new Task<string>[jobs.Count];

    var retryOptions = new RetryOptions(
        firstRetryInterval: TimeSpan.FromSeconds(60), maxNumberOfAttempts: 3);

    for (int i = 0; i < jobs.Count; i++)
    {              

        tasks[i] = context.CallActivityWithRetryAsync<string>("Crawl_Hello", retryOptions, jobs[i].Id);
    }

    await Task.WhenAll(tasks);

    return outputs;
}

每次调用活动时,都会调用此协调器功能。并循环所有活动,直到et找到未被调用的活动为止。它将循环数百万次。我是否缺少某些东西,或者持久功能不适合这种情况?

1 个答案:

答案 0 :(得分:0)

耐用功能auto-scale在Consumption和Elastic Premium计划中运行时。在部署持久功能时,有一些documented performance targets有帮助。

具体来说,您可能需要注意以下内容

  

与扇出不同,扇入操作仅限于单个VM。如果您的应用程序使用扇出,扇入模式,并且您担心扇入性能,请考虑将活动功能扇出细分为多个sub-orchestrations

因此,与其从单个协调器中调用百万个活动,不如触发具有较小批量作业的子协调器,而这些作业又将调用活动功能。