在 Durable Functions 中控制 Fan-Out/Fan-In 模式中的最大并行度

Controlling the Max Degree of Parallelism in the Fan-Out/Fan-In pattern in Durable Functions

在 Azure Durable Functions 上以模式实施风扇 out/fan 时,有没有办法控制最大并行度?

我目前正在实施此模式以执行数据加载过程,但由于操作数量太多,数据库无法处理,我在 DTU 上遇到了数据库限制。

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

的 (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);
}

这将允许您限制在单个编排实例中一次扇出的 activity 个函数。