Azure耐用功能可长时间运行

时间:2020-02-02 15:21:43

标签: azure-functions azure-durable-functions

我的活动很长,其执行完成时间将超过10分钟,但这是一项包含许多内部任务的单一活动。我想将长期运行的活动作为Azure功能在消耗计划上运行,而不是出于成本因素而在应用程序服务的高级(或)上运行。但是,Azure功能在消费计划上具有最大优势。超时时间为10分钟,因此消耗计划中的Azure功能不适合。

对于上述要求,Azure耐用功能是正确的选择吗?我可以在消耗计划上增加持久性功能,并考虑在持久性功能“业务流程上下文”中将长期运行的功能称为活动(尽管我的要求与业务流程或功能链无关),从而以经济高效的方式克服了Azure函数超时的限制

以上方法在技术上可行吗?耐用功能“ orchestrationcontext / DurableClient”中的活动功能是否不会在消费计划上10分钟后超时?有最佳实践吗?请澄清。

2 个答案:

答案 0 :(得分:0)

功能应该是短命的,它们不应该长时间运行。功能的强项是在短期内执行的吞吐量较小或可变的情况。

尽可能将大型函数重构为较小的函数集,这些函数集可以一起工作并快速返回响应。例如,Webhook或HTTP触发功能可能需要在一定时限内做出确认响应。 Webhooks要求立即响应是很常见的。您可以将HTTP触发有效负载传递到队列中,以由队列触发功能进行处理。这种方法使您可以推迟实际工作并立即返回响应。

看看这个:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-best-practices#avoid-long-running-functions

使用耐用功能,您可以使用Async HTTP APIs轻松支持长时间运行的进程。如果您要处理的功能需要一些时间来处理有效负载或请求,则在“应用程序服务计划,WebJob或耐用功能”下运行是正确的方法。

答案 1 :(得分:0)

如果我了解您的要求,那么使用持久功能的主要目的是使服务器不再使用,并仅为您使用的功能付费。

如果以上理解是正确的,那么您必须将30分钟的长时间运行功能分解为可以在5分钟或最多10分钟内完成的多个活动功能,才能解决您的问题。

但是您可以使用其他方法来解决问题陈述。

您可以创建控制台应用程序的docker映像,将其部署到azure容器注册表中,一旦消息进入队列,您就可以编写一个简单的队列触发azure函数,该函数可以使用Azure容器实例启动该映像。

Azure容器实例没有服务器,仅向您收取30分钟的执行时间。

这将解决您的问题,即不重构代码,仍然使用无服务器模型。

让我知道您对同样的想法

相关问题