我有一个需要计算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找到未被调用的活动为止。它将循环数百万次。我是否缺少某些东西,或者持久功能不适合这种情况?
答案 0 :(得分:0)
耐用功能auto-scale在Consumption和Elastic Premium计划中运行时。在部署持久功能时,有一些documented performance targets有帮助。
具体来说,您可能需要注意以下内容
与扇出不同,扇入操作仅限于单个VM。如果您的应用程序使用扇出,扇入模式,并且您担心扇入性能,请考虑将活动功能扇出细分为多个sub-orchestrations。
因此,与其从单个协调器中调用百万个活动,不如触发具有较小批量作业的子协调器,而这些作业又将调用活动功能。