Azure功能最大并发消耗单位

时间:2018-04-20 07:29:57

标签: azure azure-sql-database azure-functions

我在消费计划上有一个函数应用程序,它有一个队列触发函数,可以执行一些数据处理并写入Azure SQL。每次运行需要aprox 1分钟,我需要处理大约1000条消息一次到达。我担心许多这些运行同时击中数据库,而我可以让总时间延长。 这就是我的host.json目前的看法

{
    "functionTimeout": "00:09:50",
    "queues": {
      "maxPollingInterval": 5000,
      "visibilityTimeout" : "00:05:00",      
      "maxDequeueCount": 5,
      "batchSize": 4,
      "newBatchThreshold": 2
    }
}

我更关心可靠性而不是总时间,所以我认为改进解决方案的方法是限制并发消耗单元的最大数量,并花费更长的时间来完成1000条消息。 设置最大并发消耗单位数的方法是什么?关于提高队列触发消费功能可靠性的其他建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

目前没有像Max Concurrent Consumption Units这样的设置。

您最好使用的切换是batchSize,它定义了在单个实例(VM)上同时处理的消息数量。但是,如果应用程序扩展到多个实例,则每个实例都会运行batchSize个项目。

因此,确切的调整并不严格,但通常您应该能够根据实际工作量调整batchSize来达到您想要的目标。

最后,您可以将batchSize与固定的应用服务计划结合使用,它可以为您提供确切的保证,但会使每次执行付费收益失效。

答案 1 :(得分:2)

考虑到标准Azure功能中缺少Max Concurrent Consumption设置,并且可以完全控制并发处理,您可以考虑使用Azure Durable Functions使用适当的模式。

由于您指的是运行问题,我希望您有(或可以添加)某种触发器以便开始处理并启动异步工作流程。如果这是可能的,您可以依赖Azure Durable Functions Fan-Out/Fan-In pattern,您可以在其中控制所需的并行度。但是,这也意味着您需要手动将1000条消息出列,而不是依赖绑定为您执行此操作。

高级工作流程示例:

  1. 接收触发器以通过绑定启动运行(可以是事件网格通知或向队列添加消息),或使用Monitoring Pattern轮询外部资源。

  2. 启动一个持久功能工作流程,使您使用Fan-Out/Fan-In pattern对所有消息进行出列并处理它们,或者使用更简单的方法,在没有扇出的情况下顺序处理1000条消息。