消费计划中的Azure功能执行相互干扰



我对Azure函数有一个严重的问题。让我勾画一下我的情景。

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

那里一切都很好,所以我很高兴。现在我想扩大规模,在blob容器中提供+/-10个这样的批次。运行时开始并行执行它们,因此仍然可以按预期工作。但是:这些函数的并行执行速度明显减慢,因此单个工作负载的处理时间超过了10分钟的最大执行时间!这(超过)是减缓速度的因素5,取决于提供的工作数量。

我是不是没有抓住要点?这就是这些功能的目的,还是只是一些玩具之类的?我现在用[Singleton]来注释我的函数,这完全放弃了任何缩放优势?"无服务器"执行单元之间究竟怎么会相互干扰?

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

您应该研究Azure函数缩放算法

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

我在host.jsn中没有看到blob触发器的批量大小设置,但我尝试了小批量大小,并用ServiceBus解决了类似的问题。

你可以在blob上发送更多的工作负载,在应用程序Insight的帮助下,你可以检查Azure功能的扩展时间。

我希望你已经检查了blob触发问题。