Azure (Durable) Functions - 管理并行性

Azure (Durable) Functions - Managing parallelism

我发布这个问题是为了看看我是否正确理解了 Azure Functions 中的并行性,尤其是 Durable Functions。

最近使用 az cli 将设置最大并行度的功能添加到 Azure Functions: https://github.com/Azure/azure-functions-host/issues/1207

az resource update --resource-type Microsoft.Web/sites -g <resource_group> -n <function_app_name>/config/web --set properties.functionAppScaleLimit=<scale_limit>

我已将其应用于我的 Function App,但我不确定它如何与 Durable Functions 的 MaxConcurrentOrchestratorFunctions 和 MaxConcurrentActivityFunctions 设置一起发挥作用。

以下是否会导致全局最大 250 个并发 activity 函数?

指的是您分享的 link to limit scaling this functionAppScaleLimit will help you to specify the maximum number of instances for your function. Now coming to MaxConcurrentOrchestratorFunctions : sets the maximum number of orchestrator functions that can be processed concurrently on a single host instance and MaxConcurrentActivityFunctions the maximum number of activity functions that can be processed concurrently on a single host instance. Refer to this

现在,我将解释 MaxConcurrentOrchestratorFunctions 的作用,这将有助于您了解其工作原理:

MaxConcurrentOrchestratorFunctions 控制在任何给定时间可以将多少个协调器函数加载到内存中。如果将并发设置为 1,然后启动 10 个 orchestrator 函数,则一次只会将一个加载到内存中。请记住,如果协调器函数调用 activity 函数,则协调器函数将在等待响应时从内存中卸载。在此期间,另一个协调器功能可能会启动。结果是您将以交错方式拥有多达 10 个编排器函数 运行,但实际上一次应该只有 1 个函数在执行代码。

此功能的动机是限制 CPU 和协调器代码使用的内存。它对实现任何类型的单例模式都没有用。如果你想限制活动编排的数量,那么你将需要实现这个。

您的 activity 函数的全局最大值为 50。这是基于 functionAppScaleLimit 指定的 5 个应用程序实例和 MaxConcurrentActivityFunctions 指定的 10 个 activity 函数. orchestrator 函数执行次数与activity 函数执行次数之间的关系完全取决于您的具体实现。您可以有 1-1,000 个编排产生 1-1,000 个活动。无论如何,您建议的设置将确保单个功能实例上不会同时存在超过 5 个编排和 10 个活动 运行。