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 函数?
- functionAppScaleLimit: 5
- MaxConcurrentOrchestratorFunctions:5
- MaxConcurrentActivityFunctions:10
指的是您分享的 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 个活动 运行。
我发布这个问题是为了看看我是否正确理解了 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 函数?
- functionAppScaleLimit: 5
- MaxConcurrentOrchestratorFunctions:5
- MaxConcurrentActivityFunctions:10
指的是您分享的 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 个活动 运行。