【问题标题】:Azure Functions - Scaling And Memory LimitationsAzure Functions - 缩放和内存限制
【发布时间】:2017-11-20 02:33:00
【问题描述】:

我正在考虑将一些代码放入 Azure 函数中,并且我对内存限制以及函数的扩展方式存在疑问/担忧。

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

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

如果是这样,那就太可惜了,因为我预计大多数执行所需的内存都比这少得多。

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

例如1 个小于 1mb 的文件的队列,尽可能多的执行 = 1 个不受限制的函数。
1 个 1mb-10mb 输入文件的队列,限制为 20 个并发执行。 等等

感觉工作量超出了应有的程度,但也不算太痛苦。

这似乎是一种明智的方法,还是有更简单的方法?

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

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

    几个背景说明:

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

    我认为我们不会在任何地方发布最大可用实例数,但我可以告诉您,10 不再是限制。这是一个早期的限制,后来被取消了。你最好的选择是试一试,看看你是如何扩展的。如果您添加Application Insights support,您可以很容易地看到当前在直播中运行的实例数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多