缩放队列触发的 azure 函数的并行实例数量

Arj*_*arg 5 azure azure-functions

我试图更好地了解 azure 函数缩放在消费计划下是如何工作的。

我一直在测试一个在存储队列中插入 1000 条消息的应用程序,这会触发一个用 C# 编写的 azure 函数。

该函数下载一个文件并对其执行一些处理。完成每个请求大约需要 20 秒。

在消费计划上运行该函数,我发现完全排空队列需要 10 分钟以上的时间。将每个函数实例配置为一次仅处理一个队列消息,我原本希望为 1000 条消息启动 1000 个实例,但情况似乎并非如此。

使用 App Insights 上的实时指标流,我从未见过运行实例的数量超过 30。

这种吞吐量是预期的吗?作为参考,这是我在函数的 host.json 中的队列配置:

 "queues": {
    "maxPollingInterval": 2000,
    "visibilityTimeout": "00:00:30",
    "batchSize": 1,
    "maxDequeueCount": 5,
    "newBatchThreshold": 1
  }
Run Code Online (Sandbox Code Playgroud)

任何可以提供有关缩放功能的信息,或在此处实现更好吞吐量的建议,都将不胜感激。

Fei*_*Han 3

首先,我们可以通过在host.jsonbatchSize中设置来指定要并行检索和处理的队列消息数(每个作业函数)。如果像您一样只希望检索和处理单个队列消息,则可以设置为 1。batchSize

此外,当我们使用消耗计划时,Azure Functions 主机的实例会根据传入事件的数量动态添加和删除。在扩展过程中,一些队列消息已被处理并从队列中删除,因此它不会扩展到 1000 个实例。请参阅Azure Functions 消耗及其工作原理以获取详细信息。