azure - 控制持久函数中扇出/扇入模式的最大并行度

标签 azure azure-functions azure-durable-functions

在 Azure Durable Functions 上实现扇出/扇入模式时,是否有办法控制最大并行度?

我目前正在实现此模式来执行数据加载过程,但我遇到了 DTU 的数据库限制,因为操作数量太多,数据库无法处理。

我正在考虑的解决方案涉及使用以下属性:

  • maxConcurrentActivityFunctions
  • maxConcurrentOrchestratorFunctions

( host.json ) 文件与以下内容结合使用:

前 2 个属性应限制每个主机的并行函数执行数量,而 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 应限制主机数量。

这是否是限制最大并行度的正确方法?

最佳答案

您描述的方法是全局限制最大并行度的最佳方法。请注意,在撰写本文时,WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 并不总是可靠。今年晚些时候,该团队计划使其成为一个完全可靠的设置。

这可能不适用于您的情况,但为了其他发现此问题的读者的利益,我又添加了一件需要考虑的事情。如果您只有一个编排,您可以使用一种简单的 C# 技术来限制最大并行度,即执行如下操作:

static async Task FanOutFanInAsync(
    string functionName,
    object[] workItems,
    int maxParallelism)
{
    var inFlight = new HashSet<Task>();
    foreach (var item in workItems)
    {
        if (inFlight.Count > maxParallelism)
        {
            Task finished = await Task.WhenAny(inFlight);
            inFlight.Remove(finished);
        }

        inFlight.Add(ctx.CallActivityAsync(functionName, item));
    }

    await Task.WhenAll(inFlight);
}

这将允许您限制单个编排实例一次扇出的事件函数数量。

关于azure - 控制持久函数中扇出/扇入模式的最大并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58789750/

相关文章:

azure - 如何使用 ARM 模板将文件从主存储库上传到文件共享?

Mac 上的 Azure 服务总线监控

azure - 您可以将流量管理器与 blob 存储或 Azure 功能结合使用吗

c# - 是否可以创建一个可从 EventHub 中的多个事件触发的编排持久函数?

c# - 如何在 Durable Functions 中中止 [ActivityTrigger] 函数

c# - Entity Framework 多个结果集、Azure 连接弹性和命令拦截

azure - 必应搜索 API 统计数据

azure - Azure 预编译 C# 函数如何在 VS2017 中本地构建,但不能在 VSTS MSBuild 中构建?

azure - 安装 powershell 模块使 Azure Functions 无法正常工作

azure - Azure Durable Functions 中的依赖项调用失败