1

我有一个关于缩放 Azure 持久函数的问题。

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

我正在使用 DurableOrchestration 创建“活动”函数的扇出。

在我运行模拟的那一刻,它会将任务排队并根据我下面的配置为每个 vm 运行 2 个任务。

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

目前,这扩展了大约 20-30 多个虚拟机,并且需要一段时间才能运行,我的测试需要几分钟。通过查看历史记录表,我猜它正在慢慢增加 VM 的数量)。

我真正想要的是让我的函数位于指定数量的 vm 上,比如 200,并在几秒钟内运行模拟。

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

只是想,也许一个好主意是创建某种带有 Activity 函数调用集合的 ActivityBatch 类,您可以在其中指定每个任务将花费多长时间的近似值和所需的运行时间。

通过这种方式,Azure 可以计算需要将函数传播到多少个虚拟机,以便尝试满足用户的要求。

提前致谢

4

2 回答 2

2

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

于 2018-08-02T16:09:17.490 回答
2

正如米哈伊尔所说,你不能直接在消费计划上控制它,但你可以通过一次将尽可能多的积压而不是滴灌来“影响”它。

当您降低 maxConcurrentActivityFunctions 时,它将导致它最终扩展到更多实例,但在扩展频率和您的活动对 CPU 的使用量方面存在权衡。

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

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

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

于 2018-08-02T17:37:53.757 回答