【问题标题】:Azure Durable Function: High Processing time make the function time outAzure 持久功能:处理时间长使功能超时
【发布时间】:2019-09-17 07:15:02
【问题描述】:

我创建了一个 azure 持久函数,它调用了大约 8 个活动函数。这些活动函数创建了大约 100 个线程,它们启动 http 请求。我收到的数据必须进行转换。这个过程需要一些计算能力。例如:所有函数在本地需要大约 3 分钟,直到它们完成。

现在我想在 azure 中发布我的 azure 功能,并附上消费计划及其优势。我现在遇到的问题是,函数耗时超过10分钟,超过了最大执行时间。

我不想使用应用服务。我正在寻找一种通过缩放控制器或某些行为来增加核心数量的方法,从而使缩放控制器提高性能。

如果可能,我不想更改我的代码架构。我考虑将持久功能拆分为更小的部分,并手动使用 http 请求启动每个功能。但是由于函数是相互交互的,这似乎是对代码的一个非常大的改变,而不知道它是否会使缩放控制器使用更多的实例。

【问题讨论】:

  • 当您谈论“该功能需要超过 10 分钟”时,您指的是哪个功能?协调器功能可以持续超过 10 分钟,因为状态被持久化到存储中。仅当活动功能需要超过 10 分钟时才会出现问题。
  • 尽量使活动功能尽可能小(正如@Marc 提到的那样,它们会受到 10 分钟超时的限制),考虑每个活动功能有一个 http 请求。您仍然可以从协调器功能并行启动活动,然后等待它们完成并进行最终处理。

标签: c# azure azure-functions azure-durable-functions


【解决方案1】:

在消费计划中,您将无法使用to control scale directly。也就是说,您至少可以控制在单个实例上执行的活动数量。如果将you set maxConcurrentActivityFunctions 设置为 1 之类的值,它将确保即使它尚未横向扩展,实例上一次只会处理一个活动,因此它不必与太多其他并发实例共享计算。

整体横向扩展将由活动队列的长度驱动。因此,尽可能多地参与较小的活动,而不是只参与少数本身散布的大型活动,这符合您的最大利益。但是使用上面链接的一些旋钮,您应该希望至少能够将更多的 CPU 用于正在执行的活动。

【讨论】:

  • 恐怕该解决方案没有帮助,但您的评论让我明白了带有消费计划的 Azure 功能的用途。我从使用 Azure 函数切换到使用 docker 容器,由 azure 逻辑应用程序定时。我可以用 4 个 vcore 很好地扩展该容器,现在它完全符合我的要求,可靠且非常便宜,因为它总是动态创建的。这是我的最终解决方案,谢谢!
猜你喜欢
  • 2012-01-25
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多