【问题标题】:azure function max execution time天蓝色函数最大执行时间
【发布时间】:2017-05-22 15:35:10
【问题描述】:

我想在计时器上调用一个函数(每 X 分钟一次),但我想确保一次只运行该函数的一个实例。函数中发生的工作不应该花费很长时间,但是如果由于某种原因它需要的时间比预定的计时器(X 分钟)长,我不希望另一个实例启动并且进程相互踩踏。

我能想到的最简单的方法是将函数的最大执行时间也设置为 X 分钟。我想知道如何在应用服务和消费计划中实现这一点,即使它们是不同的方法。我还希望能够在单个功能级别上进行设置。

这种类型的功能通常内置在 FaaS 环境中,但我很难在 google 上搜索它。这可能在function.json中吗?还是有不同的方法来确保它只运行一次?

(PS。我知道我可以在我自己的代码中通过将工作包装在一个超时的线程中。但我希望有更惯用的东西。)

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

    定时器函数已经具有这种行为 - 它们从AzureWebJobsStorage 存储帐户中取出一个 blob 租约,以确保只有一个实例正在执行定时器函数。此外,当先前计划的执行正在进行时,计时器将不会执行。

    另一种自行滚动的可能性是使用存储队列和可见性超时来处理此问题 - 当队列完成处理后,推送一条具有可见性超时的新队列消息以匹配所需的计划。


    我想提一下 functionTimeout host.json 属性将为您的所有函数添加超时,但有副作用是您的函数将因超时错误而失败并且该函数实例将重新启动,所以我不会在这种情况下不要依赖它。

    【讨论】:

      【解决方案2】:

      您可以在 host.json 中指定 'functionTimeout' 属性 https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json

      // Value indicating the timeout duration for all functions.
      // In Dynamic SKUs, the valid range is from 1 second to 10 minutes and the default value is 5 minutes.
      // In Paid SKUs there is no limit and the default value is null (indicating no timeut).
             "functionTimeout": "00:05:00"
      

      【讨论】:

        【解决方案3】:

        有一个名为 Premium(截至 2019 年 5 月为公共预览版)的新 Azure Functions 计划,它允许无限的执行时间: https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale

        它可能最终会成为大多数企业场景的 goto 计划。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-22
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 2021-08-15
          • 2021-10-17
          • 2023-03-04
          • 2019-04-08
          相关资源
          最近更新 更多