2017-06-17 55 views
1

我有一些代碼,我正在考慮將其放入Azure函數中,並且我有一個關於內存限制以及函數如何擴展的問題/關注。Azure函數 - 縮放和內存限制

在高端,應用程序可以使用大約800 MB的內存進行單次執行,因此如果我可以使用的最大內存量爲1536mb,那麼我只能執行1個併發執行操作,而不會耗盡內存。

我的理解是,最多可以有10個實例,帶有x個併發執行,但是如果最大容量只允許我在沒有超時的情況下運行執行,這是否意味着我需要手動設置最大併發執行次數爲1,並且它會自動擴展到最多10個實例,這意味着我一次只能執行10次全局執行?

如果是這樣,那是一種令人失望的行爲,因爲我期望大多數執行的內存要比這少得多。

這是一個文件操作函數,所以我可以根據輸入文件的大小準確地猜測使用了多少內存,所以如果我根據輸入大小調整後端以填充各種隊列,我可以有一個高端隊列(每個實例一次只允許執行一次),然後將其劃分爲其他大小的隊列,並手動調整最大併發實例,並使用針對其相關隊列的特定功能。

例如1隊列中的任何文件少於1MB,儘可能多的執行= 1個不受限制的函數。
1個隊列爲1mb-10mb輸入文件,限於20個併發執行。 等

感覺就像應該做更多的工作,但它並沒有太多的痛苦。

這似乎是一個明智的做法,還是有一種更簡單的方法?

您究竟如何限制併發執行次數?

回答

1

一對夫婦的背景解釋:

  • 斑點處理由後面隊列的幕後處理。當我們找到一個新的(或修改過的)blob時,我們把這個blob信息放入一個隊列消息並排入隊列。這意味着host.json中可用於隊列的設置也適用於blob處理。
  • 函數的隊列配置位於主機級別並被所有隊列使用。爲了您的方案能夠正常工作,您需要爲每批文件大小創建一個功能應用程序,併爲該應用程序配置queues - >batchSizehost.json。因爲你可能遇到內存限制,無論如何,這可能是你最好的選擇,因爲你不會在同一主機上並行運行多個函數。

我不相信我們在任何地方發佈最大可用實例數,但我可以告訴你,10不再是限制。這是一個早已解除的限制。你最好的選擇是嘗試一下,看看你如何擴展。如果添加Application Insights support,則可以非常輕鬆地看到實時流中當前正在運行的實例的數量。