Azure Durable Functions 缩放

Azure Durable Functions Scaling

我对缩放 Azure 持久函数有疑问。

我正在编写一个模拟引擎来执行大量(1000 项)计算密集型任务(复杂数学),这些任务需要相对较短的时间,每次大约 10 秒。

我正在使用 DurableOrchestration 创建 "Activity" 函数的扇出。

在我 运行 模拟的那一刻,它将根据我下面的配置排队任务和每个虚拟机 运行 2 个任务。

{ 
        "durableTask": {
            "maxConcurrentActivityFunctions": 2,
            "maxConcurrentOrchestratorFunctions": 10
          }
     }

这目前扩展了大约超过 20-30 个虚拟机,需要一段时间 运行,我的测试需要几分钟。通过查看历史 table).

,我猜它正在缓慢增加 VM 的数量

我真正想要的是我的函数在指定数量的虚拟机上运行,​​比如 200 和 运行 以秒为单位的模拟。

我正在制定消费计划,这目前是否可行,或者可以通过其他应用计划实现吗?

只是想想,也许一个好主意是创建某种 Activity 批处理 class,其中包含一组 Activity 函数调用,您可以在其中指定每个调用的近似时间任务将花费所需的 运行 时间。

这样 Azure 就可以计算它需要将函数传播到多少个虚拟机,以便它可以尝试满足用户的要求。

提前致谢

无法直接干预Scale Controller(决定横向扩展和实例数量的组件)。它具有内部算法,可根据当前使用指标(如队列大小和 CPU 负载)确定缩放参数。该算法不是 public 且不可配置。

正如 Mikhail 所说,您无法在消耗计划中直接控制它,但您可以 "affect" 通过一次尽可能多地处理积压而不是滴灌来控制它。

当您降低 maxConcurrentActivityFunctions 时,它最终会扩展到更多实例,但在扩展频率和您的 activity 对 CPU。

如果它们非常 CPU 密集,那么我很想尝试将并发计数降低到 1,因为同一节点上的多个 100% CPU 每个只需要两倍的时间每个节点 运行ning 1,因此您可以获得更多实例和更快的开始到结束时间。

这绝对值得试验,而且它只会分配新实例作为信息 根据文档,最多每 10 秒一次,我不能 100% 确定它是否一次只添加 1 个实例,但我确定我已经看到它一次添加超过 1 个实例?

哦,在应用服务计划中,您可以一直 运行 200 个实例,但除非您期望这是 运行24/7 全天候,否则它可能不符合成本效益。