gpt4 book ai didi

Azure 耐用功能扇出扇入建议

转载 作者:行者123 更新时间:2023-12-03 02:46:33 26 4
gpt4 key购买 nike

我只是想听听您对我的场景的最佳方法的意见。我有一个要处理的联系人列表,可能有 100 个或更多。对于每个联系,可能需要不到一分钟的时间即可完成。

我尝试过函数链和扇出/扇入模式。函数链接需要更长的时间来处理,如果处理时间超过 5 分钟,肯定会抛出超时(这种情况可能会发生)。另一方面,扇出/扇入可以并行处理联系人,但每个实例只能处理 100 条记录 [不确定原因]。我不能 100% 确定对可扩展性的影响。

//Function Chaining
var contacts = context.CallActivityAsync<List<Contacts>>("GetContacts", null);
await context.CallActivityAsync("ProcessContacts", contacts);

//Fan-out/Fan-in pattern
var contacts = context.CallActivityAsync<List<Contacts>>("GetContacts", null);
foreach(var contact in contacts){
await context.CallActivityAsync("ProcessContact", contact);
}

老实说,我想使用扇出/扇入,但同样,我不确定其影响。

我只是想得到关于我应该选择哪种模式的意见。

最佳答案

上面的代码不是扇出,为了扇出,您需要立即创建所有事件请求,然后等待它们全部完成。通过这种方式,消费计划将不断生成实例,直到完成所有工作。

尝试将扇出代码更改为如下所示:

var tasks = new List<Task>();
foreach (var contact in contacts)
{
tasks.Add(context.CallActivityAsync("ProcessContact", contact));
}
await Task.WhenAll(tasks);

这会为每个联系人创建 1 个事件任务,并将它们放入队列中以供函数处理;然后等待它们全部完成。

一旦您看到此运行,您就会想要查看 maxConcurrentActivityFunctions根据您的处理的 CPU 等密集程度,您可能只想在单个实例上并行处理 5 个联系人。

您可以尝试最初将其设置为 1,然后设置为 10,看看速度差异是什么,您会发现您拥有的联系人越多,maxConcurrentActivityFunctions 越小,消耗计划创建新实例的速度就越快,但这可能不会提高速度效率,因此您需要在单个 CPU 实例的最佳使用和 maxConcurrentActivityFunctions 之间找到平衡。

我建议您将其连接到 Application Insights 实例,然后查看实时指标,它将向您显示 CPU/内存使用情况以及正在创建的实例数量等信息。

希望有帮助。

关于Azure 耐用功能扇出扇入建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com