消费计划中的Azure函数执行会互相干扰

时间:2019-01-10 11:14:21

标签: c# .net function azure scaling

我对Azure Functions有严重的问题。让我概述一下我的情况。

我有一个工作量,用于处理Blob容器中的传入数据文件。使用BlobTrigger,我的处理功能会拾取文件,对其进行处理并将其从容器中删除。在消费计划处理后2分钟内,一个文件的所有内容。

一切都很好,所以我很高兴。现在,我想按比例放大内容,并在Blob容器中提供+/- 10个批次。运行时开始并行执行它们,因此仍可以按预期运行。但是,然后:这些功能的并行执行速度明显降低,因此单个工作负载的处理时间超过了最大值。执行时间为10分钟!这是导致事情放慢速度的5倍以上,具体取决于提供的职位数量。

我在这里错过了重点吗?这是为这些功能构建的,还是仅仅是玩具或其他东西?我现在依靠[Singleton]来注释我的函数,在这里完全放弃了任何缩放方面的好处? “无服务器”执行单元究竟如何相互干扰?

我很困惑,任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

您应该查看Azure function scaling algorithm

首次使用Azure函数会分配一个小的实例(1.5 GB)来处理工作负载,这需要一些时间来了解扩展要求,然后只有Azure ScaleController会添加/删除该实例。对于单个blob,1.5 GB实例需要2分钟,而对于10 blob,同一个实例(1.5 GB)将共享资源,并且需要时间。

我没有see在host.josn中为blob触发器设置批处理大小,但是我尝试了小批处理并解决了ServiceBus的类似问题。

您可以在blob上发送更多工作负载,并且借助应用程序Insight,可以检查Azure函数扩展时间。

我希望您已经checked个Blob触发问题。