Azure函数 - 缩放和内存限制

时间:2017-06-17 11:30:07

标签: azure azure-functions

我有一些代码,我正在考虑将其添加到Azure函数中,并且我对内存限制以及函数如何扩展有疑问/担忧。

在高端,应用程序可以使用大约800 MB的内存进行单次执行,所以如果我可以使用的最大内存是1536mb,那么我只能有1个并发执行而不会耗尽内存。

我的理解是最多可以有10个实例,有x个并发执行,但是如果最大容量只允许我运行1而没有超时,这是否意味着我需要手动设置最大值并发执行到1,它会自动扩展到最多10个实例,这意味着我一次只能执行10次总执行?

如果是这样,那是一种无赖,因为我希望大多数执行都需要比这更少的内存。

这是一个文件操作函数,所以我可以根据输入文件大小合理准确地猜测将使用多少内存,所以如果我重组后端以根据输入大小填充各种队列,我可以有1个队列用于高端内容(每个实例一次只允许执行1次),然后将其划分为其他大小的队列,并手动调整最大并发实例,并使用针对其关联队列的特定功能。

e.g。对于任何小于1mb的文件,1个队列,尽可能多的执行= 1个不受限制的功能 1个队列,1mb-10mb输入文件,限制为20个并发执行。 等

感觉就像应该做的更多的工作,但这不是太痛苦。

这看起来是一种明智的做法,还是有更简单的方法?

您如何限制并发执行的数量?

1 个答案:

答案 0 :(得分:1)

几个背景解释:

  • Blob处理由队列在幕后处理。当我们找到一个新的(或修改过的)blob时,我们将该blob信息放入队列消息中并将其排队。这意味着host.json中队列中可用的设置也适用于blob处理。
  • 功能的队列配置位于主机级别,并由所有队列使用。为了使您的方案有效,您需要为每批文件大小创建一个功能应用,并配置queues - >该应用的host.json batchSize。因为您可能会遇到内存限制,所以这可能是您最好的选择,因为您不会在同一主机上并行运行多个功能。

我不相信我们会在任何地方发布最大可用实例数,但我可以告诉你,10不再是限制了。这是一个早期的限制,此后一直被取消。你最好的选择是尝试一下,看看你如何扩展。如果添加Application Insights support,您可以非常轻松地查看当前在直播中运行的实例数量。